MySQL DATETIME インデックスを使用した日付クエリの最適化
MySQL で DATETIME フィールドを操作する場合、日付フィルタリングを含むクエリを最適化することが不可欠です。 DATETIME 列の一部をクエリするクエリのパフォーマンスを向上させるには、専用インデックスの利用を検討してください。
大量のレコードと TranDateTime という DATETIME 列を含む、transactionlist という名前のテーブルがあるとします。次のようなクエリを実行すると、パフォーマンスの問題が発生します。
SELECT * FROM transactionlist WHERE date(TranDateTime) = '2008-08-17'
クエリが遅い理由:
カラムが渡されるため、MySQL はテーブル全体のスキャンを使用してこのクエリを実行します。 date() 関数を介して。クエリ オプティマイザーは関数の結果を予測できないため、インデックスをバイパスします。
解決策: 日付インデックスを作成する
テーブル スキャンを回避し、クエリのパフォーマンスを向上させるため、TranDateTime 列の日付部分をカバーするインデックスを作成します。これは、次のコマンドで実行できます:
CREATE INDEX idx_TranDateTime_date ON transactionlist (date(TranDateTime));
日付インデックスを使用したクエリの例:
インデックスを作成した後、クエリはそれを利用して大幅に実行されます。より高速:
SELECT * FROM transactionlist WHERE date(TranDateTime) BETWEEN '2008-08-17' AND '2008-08-17 23:59:59.999999';
注:
BETWEEN 演算子を使用する場合は、時間コンポーネントで 1 日の終わりを指定して、時間内のすべてのトランザクションをキャプチャするようにしてください。希望する日付範囲。
以上がDATETIME インデックスを使用して MySQL の日付クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。