Si desea aprovechar LIMIT
para mejorar el rendimiento, necesita
- Comprenda los datos que está recuperando
- indexación adecuada de la secuencia correcta de columnas
- asumir la responsabilidad de refactorizar la consulta
- usando
LIMIT
antesJOIN
Estos principios pueden recorrer un largo camino si puede orquestarlos.
Aprendí estos conceptos al ver este video de YouTube (escuche atentamente el acento francés)
Utilicé esos conceptos para responder una pregunta muy difícil de StackOverflow sobre cómo obtener los 40 artículos principales de algunas tablas: 12 de mayo de 2011: Obtener una sola fila de la tabla de unión .
En mi respuesta a esa pregunta (16 de mayo de 2011) , escribí la siguiente consulta y la probé a fondo:
SELECT
AAA.author_id,
AAA.date_created,
IFNULL(BBB.title,'<NO_TITLE>') title,
IFNULL(CCC.filename,'<NO-IMAGE>') filename,
IFNULL(CCC.date_added,'<NO-IMAGE-DATE>') image_date
FROM
(
SELECT
AA.id,
AA.date_added,
BB.author_id,
BB.date_created
FROM
(
SELECT
A.id,IFNULL(MAX(B.date_added),'1900-01-01 00:00:00') date_added
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
LEFT JOIN article_images B ON A.id = B.article_id
GROUP BY A.id
) AA
INNER JOIN articles BB USING (id)
) AAA
LEFT JOIN article_contents BBB ON AAA.id=BBB.article_id
LEFT JOIN article_images CCC
ON (AAA.id=CCC.article_id AND AAA.date_added=CCC.date_added)
ORDER BY AAA.date_created DESC;
Tenga en cuenta la línea en la consulta con el LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Esta subconsulta está enterrada a tres niveles de profundidad. Esto me permitió obtener los últimos 40 artículos usando LIMIT
. Luego, realicé las UNIONES necesarias después.
LECCIONES APRENDIDAS
- Hacer las
LIMIT
subconsultas internas puede no ser siempre la respuesta debido a la cardinalidad de los índices, el contenido de los datos y el tamaño del conjunto de resultados de LIMIT
. Si tiene todos sus "patos en una fila" (tenga los cuatro principios en mente para su consulta), puede obtener resultados sorprendentemente buenos.
- Haga sus consultas lo más simple posible cuando lo haga
LIMIT
reuniendo solo claves.
LIMIT
mejoran la eficiencia: Optimización de consultas LIMIT