sql >> Database >  >> RDS >> Mysql

MySQL-index vertraagt ​​zoekopdracht

Het lijkt erop dat article_id de primaire sleutel is voor de artikeltabel.

Aangezien u groepeert op artikel_id, moet MySQL de records op volgorde van die kolom retourneren om de GROUP BY uit te voeren.

Je kunt zien dat het zonder de index alle records in de artikeltabel scant, maar ze zijn in ieder geval geordend op artikel_id, dus later is sorteren niet nodig. De LIMIT-optimalisatie kan hier worden toegepast, aangezien het al in orde is, kan het gewoon stoppen nadat het vijf rijen heeft gekregen.

In de query met de index op tag.name, in plaats van de hele artikeltabel te scannen, gebruikt het de index, maar tegen de tagtabel, en begint daar. Als u dit doet, moeten de records helaas later worden gesorteerd op artikel.article_id om de GROUP BY-clausule te voltooien. De LIMIT-optimalisatie kan niet worden toegepast, omdat deze de volledige resultatenset moet retourneren en deze vervolgens moet ordenen om de eerste 5 rijen te krijgen.

In dit geval raadt MySQL gewoon verkeerd.

Zonder de LIMIT-clausule vermoed ik dat het gebruik van de index sneller is, wat misschien is wat MySQL vermoedde.



  1. MySQL-syntaxisfout juiste syntaxis om te gebruiken in de buurt van 'desc'

  2. Converteer een complexe SQL-query naar SQLAlchemy

  3. Hoe draaien? Hoe converteer je meerdere rijen naar één rij met meerdere kolommen?

  4. Hoe wijzig ik de standaardwaarde van de kolom in PostgreSQL?