2
SELECT MIN(id) 
FROM mytable 
WHERE lastname IN('Smit','Lee') 
GROUP BY name

ここで、このクエリを最適化するには、インデックスが必要です (役立つでしょう) 列のは正しいですか? および列にもインデックスが必要ですか? またはインデックス付きの姓だけで十分ですか?

4

3 に答える 3

2

lastname のインデックスは、通常、そのクエリに役立ちます。索引付け名は効果があってはなりません。

EXPLAIN を使用して、MySQL がクエリをどのように実行するかを確認できます (使用する必要があります)。

于 2012-10-11T20:48:41.777 に答える
2

プログラミングで従うべき良いルールは、何が遅いか速いかを知っていると思い込まないことです。常にテストしてください。

このリンクMySQL プロファイリングをチェックしてください。機能すると思われる場所にインデックスを追加してから、いくつかのテストを実行します。

于 2012-10-11T20:48:56.773 に答える
1

提案された両方のインデックスはあなたの状況で役立つはずですが、それはあなたが持っているデータと、idの重複があるかどうかに応じて、データベースエンジンによって特定の操作がどれだけ高価であるかに大きく依存します。 id と呼ばれる理由ですが、lastname, idorで 2 列のインデックスを作成する場合name, idも役立ちます。最終的に、クエリ オプティマイザーは、データをフェッチするために使用する戦略を決定します。これは確かに多くのことに影響します...次のことを試して、どちらが速いかを確認することをお勧めします。

  • 索引付けlastname- 可能性あり
  • インデックスオンname- 少し可能性が低い
  • 索引付けlastname, name- 可能性が高い
  • インデックスオンname, lastname- 最も可能性が低い

繰り返しますが、実際にはデータに依存しますが、ID が一意でない場合は、ID のインデックスとの組み合わせも試してみてください。

于 2012-10-11T20:49:21.813 に答える