Det finns en gräns för hur mycket optimering du kan göra på ORDER BY-klausuler. Det primära som ibland hjälper är att ha ett index på rätt uppsättning kolumner i rätt ordning. Så, för ditt exempel, ett (enkelt, sammansatt) index på:
average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC
kan hjälpa, men optimeraren kan ändå bestämma sig för att det är bättre att använda något annat index för att hantera filtertermerna i frågan och sedan sorterar den den valda datan själv. Observera att om inte indexet tillhandahåller data i exakt korrekt sorterad ordning och användningen av indexet påskyndar frågan totalt sett, kommer optimeraren inte att använda den. Ett index på endast en av kolumnerna som ska sorteras är en begränsad fördel för optimeraren, och den kommer normalt inte att använda ett sådant index.
En fråga att fundera över:
- Hur snabbt går frågan utan ORDER BY-satsen.
Det ger dig ett mycket direkt mått på kostnaden för sortering. Du nämner 20 ms utan beställning och 120 ms med beställning, så ORDER BY är måttligt dyr. Nästa fråga kan vara "Kan du överträffa sin sorts i din ansökan?". Du kanske kan göra det, men sorteringspaketet i ett DBMS är vanligtvis ganska väl optimerat och du kommer sannolikt att behöva arbeta hårt för att slå det.