sql >> Databáze >  >> RDS >> Mysql

Optimalizujte dotaz ORDER BY

U klauzulí ORDER BY je omezena míra optimalizace. Primární, který někdy pomáhá, je mít index na správné sadě sloupců ve správném pořadí. Takže pro váš příklad (jednoduchý, složený) index na:

average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC

může pomoci, ale optimalizátor se může přesto rozhodnout, že je lepší použít nějaký jiný index, aby se vypořádal s filtračními výrazy v dotazu, a pak sám seřadí takto vybraná data. Všimněte si, že pokud index neposkytuje data přesně ve správném pořadí a použití indexu celkově nezrychlí dotaz, optimalizátor jej nepoužije. Index pouze v jednom ze sloupců, který se má třídit, je pro optimalizátor omezenou výhodou a obvykle takový index nepoužívá.

Jedna otázka ke zvážení:

  • Jak rychle dotaz funguje bez klauzule ORDER BY.

To vám dává velmi přímé měření nákladů na třídění. Uvádíte 20 ms bez objednání a 120 ms s objednáním, takže ORDER BY je středně drahý. Další otázka by mohla znít „Dokážete překonat její řazení ve vaší aplikaci?“. Možná to zvládnete, ale třídicí balíček v DBMS je obvykle poměrně dobře optimalizován a pravděpodobně budete muset tvrdě pracovat, abyste jej překonali.



  1. Talend, jak zkopírovat jednu db do druhé

  2. Chyby MySQL:MAX_JOIN_SIZE

  3. Při výběru a zakódování základního 64 obrázku z databáze byla zjištěna pomalost

  4. připojení k databázi quickbooks přes odbc s php?