次のようなクエリがある場合、
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
datetime_field
列にインデックスを付けることは役に立ちますか?つまり、インデックスは、等式(または不等式)テストを使用する場合にのみ役立ちますか、それとも順序付き比較を行う場合にも役立ちますか?
(テーブルを再作成せずに、このクエリをより適切に実行するための提案も大丈夫です!)
次のようなクエリがある場合、
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
datetime_field
列にインデックスを付けることは役に立ちますか?つまり、インデックスは、等式(または不等式)テストを使用する場合にのみ役立ちますか、それとも順序付き比較を行う場合にも役立ちますか?
(テーブルを再作成せずに、このクエリをより適切に実行するための提案も大丈夫です!)
多分。一般に、そのようなインデックスがある場合、クエリに「より良い」インデックスがない場合は、そのインデックスで範囲スキャンを使用します。ただし、オプティマイザーが範囲が大きくなりすぎると判断した場合(つまり、行の3分の1以上を含む)、テーブルスキャンではインデックスが使用されない可能性があります。もっと早く。
EXPLAIN(SELECTで。削除をEXPLAINすることはできません)を使用して、特定の場合の決定を決定します。これは依存する可能性があります
Bツリーインデックスは、=、>、> =、<、<=、またはBETWEEN演算子を使用する式の列比較に使用できます。
行数が多い場合は、テーブルスキャンよりもツリーインデックスを使用して行を検索する方がはるかに高速です。しかし、他の回答が指摘しているように、EXPLAIN
MySQLの決定を見つけるために使用してください。
日時フィールドのインデックスは、日付範囲ベースの検索に間違いなく役立ちます。私たちはデータベースで常にそれらを使用しており、インデックスがないとクエリは非常に遅くなります。
そうです、DESCRIBESELECTFROMテーブルで確認してください...