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.