una soporta segundo relacional rapida por para optimizar modelo mas lentas hacer grandes ejemplos ejemplo datos cuantas consultas consulta como cantidades mysql tags

soporta - optimizar consultas lentas mysql



La mejor estructura para una base de datos relacional con artículos y etiquetas (3)

Tengo un sistema bastante sencillo:

Tabla de articles , tabla de tags , tabla de etiquetas de artículos que contiene los ID de la etiqueta y el artículo al que está asignado.

Cuando quiero obtener una lista de todos mis artículos y todas sus etiquetas, tengo que hacer algunas consultas GROUP_CONCAT() para obtener una lista de etiquetas separadas por comas, que puedo separar y mostrar.

Cada vez es más lento cargar páginas más grandes y me preocupa que no sea la mejor forma de hacerlo. Hace poco hice una pregunta sobre cómo obtener todos los artículos con una etiqueta específica, y terminé buscando una solución con dobles combinaciones. Esta consulta se ejecuta rápidamente, pero una consulta "general" (p. Ej., Captar los 10 artículos más nuevos junto con todas sus etiquetas) tarda hasta 1 segundo en ejecutarse.

Mis tablas están indexadas bastante bien y otras consultas se ejecutan rápidamente. ¿Hay una mejor forma / patrón de diseño para este tipo de estructura SQL? Cualquier consejo sería realmente útil.

Gracias, Matt


La estructura de la tabla es correcta, el mejor enfoque sería analizar el plan de ejecución de la consulta utilizando la sintaxis de EXPLAIN y publicarla si necesita ayuda.


Quizás pueda duplicar el sistema precomputando group_concat en otro campo de la tabla de artículos y agregando un índice FULLTEXT en él.

No estoy seguro de cuáles serán las actuaciones, pero es fácil de probar. Las consultas simples se ejecutarán a través del proceso habitual (que se mantendría más rápido) y las más complejas se pueden ejecutar de esta forma (lo que sería más rápido que las uniones).


Tratar de devolver todas las etiquetas en group_concat es casi seguro el cuello de botella.

¿Hay algún problema con devolver todas las filas en el orden correcto y repetir los artículos?