SELECT MIN(id)
FROM mytable
WHERE lastname IN('Smit','Lee')
GROUP BY name
ここで、このクエリを最適化するには、インデックスが必要です (役立つでしょう) 列の姓は正しいですか? および列名にもインデックスが必要ですか? またはインデックス付きの姓だけで十分ですか?
SELECT MIN(id)
FROM mytable
WHERE lastname IN('Smit','Lee')
GROUP BY name
ここで、このクエリを最適化するには、インデックスが必要です (役立つでしょう) 列の姓は正しいですか? および列名にもインデックスが必要ですか? またはインデックス付きの姓だけで十分ですか?
lastname のインデックスは、通常、そのクエリに役立ちます。索引付け名は効果があってはなりません。
EXPLAIN を使用して、MySQL がクエリをどのように実行するかを確認できます (使用する必要があります)。
プログラミングで従うべき良いルールは、何が遅いか速いかを知っていると思い込まないことです。常にテストしてください。
このリンクMySQL プロファイリングをチェックしてください。機能すると思われる場所にインデックスを追加してから、いくつかのテストを実行します。
提案された両方のインデックスはあなたの状況で役立つはずですが、それはあなたが持っているデータと、idの重複があるかどうかに応じて、データベースエンジンによって特定の操作がどれだけ高価であるかに大きく依存します。 id と呼ばれる理由ですが、lastname, id
orで 2 列のインデックスを作成する場合name, id
も役立ちます。最終的に、クエリ オプティマイザーは、データをフェッチするために使用する戦略を決定します。これは確かに多くのことに影響します...次のことを試して、どちらが速いかを確認することをお勧めします。
lastname
- 可能性ありname
- 少し可能性が低いlastname, name
- 可能性が高いname, lastname
- 最も可能性が低い繰り返しますが、実際にはデータに依存しますが、ID が一意でない場合は、ID のインデックスとの組み合わせも試してみてください。