sql >> Base de Datos >  >> RDS >> Mysql

Desde una perspectiva de rendimiento, ¿qué tan eficiente es usar una tabla temporal de MySQL para una función de sitio web muy utilizada?

Lo que indicó es totalmente correcto, la tabla temporal solo será visible para el usuario/conexión actual. Aún así, hay algunos gastos generales y otros problemas como:

  • Para cada una de las miles de búsquedas que va a crear y llenar esa tabla (y soltarla más tarde), no por usuario, por búsqueda. Porque lo más probable es que cada búsqueda vuelva a ejecutar el script, y "por sesión" no significa sesión de PHP, significa sesión de base de datos (conexión abierta).
  • Necesitará CREATE TEMPORARY TABLES privilegio, que usted podría no tener.
  • Aún así, esa tabla realmente debería tener el tipo MEMORY, que roba RAM más de lo que parece. Porque incluso teniendo VARCHAR, las tablas MEMORY usan almacenamiento de filas de longitud fija.
  • Si su heurística luego necesita hacer referencia a esa tabla dos veces (como SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ... ) - esto no es posible con las tablas MEMORY.

A continuación, sería más fácil para usted, y también para la base de datos, agregar LIKE '%xyz%' directamente a tus images tablas WHERE cláusula. Hará lo mismo sin la sobrecarga de crear una TABLA TEMPORAL y unirla.

En cualquier caso, no importa en qué dirección vayas, ese DONDE será terriblemente lento. Incluso si agrega un índice en images.name lo más probable es que necesites LIKE '%xyz%' en lugar de LIKE 'xyz%' , por lo que ese índice no se utilizará.

No. :)

Opciones alternativas

MySQL tiene un Búsqueda de texto completo (desde 5.6 también para InnoDB) que incluso puede darle ese puntaje:recomiendo leerlo y probarlo. Puede estar seguro de que la base de datos sabe mejor que usted cómo hacer esa búsqueda de manera eficiente.

Si va a utilizar MyISAM en lugar de InnoDB, tenga en cuenta la limitación que a menudo se pasa por alto de que las búsquedas de TEXTO COMPLETO solo devuelven algo si el número de resultados es inferior al 50 % del total de filas de la tabla.

Otras cosas que quizás desee ver son, por ejemplo, Solr (una buena introducción leída sobre ese tema en sí sería el comienzo de http://en.wikipedia.org/wiki/Apache_Solr ). Lo estamos usando en nuestra empresa y hace un gran trabajo, pero requiere bastante aprendizaje.

Resumen

La solución a su problema actual en sí (la búsqueda) es usar las capacidades FULLTEXT.

Para darte una cifra, 10.000 llamadas por segundo ya no son "triviales"; con cientos de miles de búsquedas por segundo, el tipo de problemas de rendimiento que encontrarás están en todas partes en tu configuración. Vas a necesitar un par de servidores, balanceo de carga y toneladas de otras increíbles cosas tecnológicas. Y uno de estos será por ejemplo Solr;)