sql >> Database >  >> RDS >> Mysql

Optimaliseer een ORDER BY-query

Er is een limiet aan hoeveel optimalisatie u kunt doen op ORDER BY-clausules. De belangrijkste die soms helpt, is het hebben van een index op de juiste reeks kolommen in de juiste volgorde. Dus, voor jouw voorbeeld, een (enkele, samengestelde) index op:

average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC

zou kunnen helpen, maar de optimizer kan nog steeds besluiten dat het beter is om een ​​andere index te gebruiken om de filtertermen in de query af te handelen en dan zal het de aldus geselecteerde gegevens zelf sorteren. Houd er rekening mee dat, tenzij de index de gegevens in precies de juiste gesorteerde volgorde levert en het gebruik van de index de zoekopdracht in het algemeen versnelt, de optimizer deze niet zal gebruiken. Een index op slechts één van de te sorteren kolommen is een beperkt voordeel voor de optimizer en zal normaal gesproken niet zo'n index gebruiken.

Een vraag om te overwegen:

  • Hoe snel werkt de zoekopdracht zonder de ORDER BY-clausule.

Dat geeft u een zeer directe meting van de sorteerkosten. U noemt 20 ms zonder bestellen en 120 ms bij bestellen, dus de ORDER BY is redelijk duur. De volgende vraag zou kunnen zijn:"Kunt u beter presteren dan zijn soort in uw toepassing?". Dat zou je misschien kunnen doen, maar het sorteerpakket in een DBMS is meestal redelijk goed geoptimaliseerd en je zult waarschijnlijk hard moeten werken om het te verslaan.



  1. Equivalent van explode() om te werken met strings in MySQL

  2. SQL LIKE-operator gebruiken als een parameter voor opgeslagen procedures

  3. Decimaalveld converteert nul naar 0E-10

  4. Hoe importeer ik een SQL Server .bak-bestand in MySQL?