sql >> Database >  >> RDS >> Mysql

Hoe MySQL-query's te optimaliseren op basis van het EXPLAIN-plan?

Hangt ervan af waar je voor gaat en wat de vraag is.

Over het algemeen geldt voor elke regel in EXPLAIN met een Using where , moet u het hebben met behulp van een index (possible keys en keys kolom). Dit zijn uw filters en bevatten WHERE en ON. Laat het zeggen Using index is nog beter. Het betekent dat er een dekkende index is en dat MySQL de gegevens rechtstreeks uit de index kan ophalen in plaats van naar de rij in de tabelgegevens te gaan.

De regels waar geen Using where . staat , en het geeft als resultaat dat er naar een groot aantal rijen moet worden gekeken. Dit zijn retourwaarden voor alle rijen in de tabel. Ik weet niet wat je vraag is, dus ik weet niet of ik hier ongerust moet zijn. Probeer de resultatenset te filteren om de grootte te verkleinen en de prestaties te verbeteren.

Over het algemeen moet u proberen te voorkomen dat u Using filesort . ziet of Using temporary , hoewel die alleen slecht zijn als je ze niet verwacht.

Filesort verschijnt meestal met de ORDER-component. Over het algemeen wilt u dat MySQL een dekkingsindex gebruikt (Using index ) zodat de rijen al op volgorde van de server worden geretourneerd. Als dat niet het geval is, moet MySQL ze daarna bestellen met filesort.

Using temporary kan slecht zijn als het verwijst naar afgeleide tabellen omdat ze geen indexen hebben. Het lijkt erop dat je expliciet een tijdelijke tabel met indexen hebt gemaakt, dus hier is het niet slecht. Soms is je enige keuze om een ​​afgeleide tabel te gebruiken, en daarom Using temporary .




  1. Hiërarchische gegevens afdrukken in een bovenliggende kindvorm ongeordende lijst php?

  2. Rollen en statussen in een systeem beheren

  3. Hoe DB-verzoeken onderscheppen? (MySQL)

  4. Traceren inschakelen in oracle-apps r12