ORDERBY句で実行できる最適化の量には制限があります。時々役立つ主なものは、正しい列の正しいセットに正しい順序でインデックスを付けることです。したがって、あなたの例では、次の(単一の複合)インデックス:
average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC
役立つかもしれませんが、オプティマイザーは、クエリ内のフィルター用語を処理するために他のインデックスを使用する方がよいと判断し、選択したデータを並べ替える場合があります。インデックスが正確に正しい並べ替え順序でデータを提供し、インデックスを使用するとクエリ全体が高速化されない限り、オプティマイザーはそれを使用しないことに注意してください。並べ替えられる列の1つだけのインデックスは、オプティマイザーにとっては限られた利点であり、通常はそのようなインデックスを使用しません。
考慮すべき1つの質問:
- ORDERBY句がない場合のクエリの実行速度。
これにより、並べ替えのコストを直接測定できます。注文なしで20ミリ秒、注文ありで120ミリ秒と言っているので、ORDERBYは適度に高価です。次の質問は、「アプリケーションでその種類よりも優れているか」ということかもしれません。それは可能かもしれませんが、DBMSのソートパッケージは通常かなり最適化されており、それを打ち負かすために一生懸命努力しなければならない可能性があります。