実際、そのクエリを最適化することはできません。
計算値を使用して結果を並べ替えているため、インデックスを使用できません。 explain
を使用する場合 クエリがどのように実行され、using temporary
を使用しているかを確認できます。 extra
に表示されます 列。これは、クエリからのすべてのデータが、順序付けが実行される一時テーブルに格納されていることを意味します。
クエリの最初の50一致のみが必要かどうかは関係ありません。最初にすべてのデータを取得し、それを一時テーブルにダンプし、そのテーブルで結果を並べ替えてから、最初の50一致を返す必要があります。
ご想像のとおり、これは時間とメモリを消費する操作です。
したがって、最適なオプションは、テーブルにインデックスを配置して、必要なすべての行をできるだけ速く取得し、php
で処理することです。 必要なデータを取得します。
ちなみに、MySQL最適化ガイド をご覧ください。 。