Se si desidera trarre vantaggio dal LIMIT
miglioramento delle prestazioni, è necessario
- capire i dati che stai recuperando
- indicizzazione corretta della sequenza corretta di colonne
- assumersi la responsabilità del refactoring della query
- usando
LIMIT
primaJOIN
Questi principi possono fare molto se puoi orchestrarli.
Ho imparato questi concetti guardando questo video di YouTube (ascolta attentamente l'accento francese)
Ho usato questi concetti per rispondere a una domanda StackOverflow molto difficile su come ottenere i primi 40 articoli da alcune tabelle: 12 maggio 2011: recupero di una singola riga dalla tabella di join .
Nella mia risposta a quella domanda (16 maggio 2011) , ho scritto la seguente query e l'ho testata 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;
Si prega di notare la riga nella query con il LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Questa sottoquery è sepolta a tre livelli di profondità. Questo mi ha permesso di ottenere gli ultimi 40 articoli usando LIMIT
. Successivamente, ho eseguito i JOIN necessari in seguito.
LEZIONI IMPARATE
- Fare una
LIMIT
subquery interna potrebbe non essere sempre la risposta a causa della cardinalità degli indici, del contenuto dei dati e della dimensione del set di risultati dal LIMIT
. Se hai tutte le tue "anatre di fila" (hai in mente i quattro principi per la tua domanda), puoi ottenere risultati sorprendentemente buoni.
- Rendi le tue domande il più semplice possibile quando lo fai
LIMIT
raccogliendo solo le chiavi.
LIMIT
migliorano l'efficienza: Ottimizzare le query LIMIT