sql >> Databasteknik >  >> RDS >> Mysql

MySQL-index saktar ner frågan

Det verkar som att artikel_id är den primära nyckeln för artikeltabellen.

Eftersom du grupperar efter article_id, måste MySQL returnera posterna i ordning efter den kolumnen för att kunna utföra GROUP BY.

Du kan se att utan indexet skannar den alla poster i artikeltabellen, men de är åtminstone i ordning efter artikel_id, så ingen senare sortering krävs. LIMIT-optimeringen kan tillämpas här, eftersom den redan är i ordning, den kan bara stoppa efter att den har fått fem rader.

I frågan med indexet på tag.name, istället för att skanna hela artikeltabellen, använder den indexet, men mot taggtabellen, och börjar där. Tyvärr, när du gör detta, måste posterna senare sorteras efter article.article_id för att kunna slutföra GROUP BY-satsen. LIMIT-optimeringen kan inte tillämpas eftersom den måste returnera hela resultatuppsättningen och sedan beställa den för att få de första 5 raderna.

I det här fallet gissar MySQL bara fel.

Utan LIMIT-satsen gissar jag att det går snabbare att använda indexet, vilket kanske är vad MySQL gissade.



  1. Meddelandesystem med PHP/MySQL

  2. MySQL Beställ före Gruppera efter

  3. Explicita JOINs vs implicita joins?

  4. Ringer du Oracles lagrade procedur från C#?