10

次のようなクエリがある場合、

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

datetime_field列にインデックスを付けることは役に立ちますか?つまり、インデックスは、等式(または不等式)テストを使用する場合にのみ役立ちますか、それとも順序付き比較を行う場合にも役立ちますか?

(テーブルを再作成せずに、このクエリをより適切に実行するための提案も大丈夫です!)

4

5 に答える 5

11

多分。一般に、そのようなインデックスがある場合、クエリに「より良い」インデックスがない場合は、そのインデックスで範囲スキャンを使用します。ただし、オプティマイザーが範囲が大きくなりすぎると判断した場合(つまり、行の3分の1以上を含む)、テーブルスキャンではインデックスが使用されない可能性があります。もっと早く。

EXPLAIN(SELECTで。削除をEXPLAINすることはできません)を使用して、特定の場合の決定を決定します。これは依存する可能性があります

  • テーブルには何行ありますか
  • 指定する範囲は何ですか
  • WHERE句で他に指定されているもの。「見栄えの良い」別のインデックスがある場合、1つのインデックスの範囲スキャンは使用されません。
于 2008-09-24T09:33:08.600 に答える
4

MySQLリファレンスマニュアルから:

Bツリーインデックスは、=、>、> =、<、<=、またはBETWEEN演算子を使用する式の列比較に使用できます。

行数が多い場合は、テーブルスキャンよりもツリーインデックスを使用して行を検索する方がはるかに高速です。しかし、他の回答が指摘しているように、EXPLAINMySQLの決定を見つけるために使用してください。

于 2008-09-24T10:51:07.790 に答える
2

日時フィールドのインデックスは、日付範囲ベースの検索に間違いなく役立ちます。私たちはデータベースで常にそれらを使用しており、インデックスがないとクエリは非常に遅くなります。

于 2008-09-24T09:25:46.653 に答える
1

そうです、DESCRIBESELECTFROMテーブルで確認してください...

于 2008-09-24T09:23:40.557 に答える