ホームページ >データベース >mysql チュートリアル >時間を無視して日ごとに MySQL レコードを効率的に選択するにはどうすればよいですか?

時間を無視して日ごとに MySQL レコードを効率的に選択するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 20:04:13508ブラウズ

How to Efficiently Select MySQL Records by Day, Ignoring Time?

時間を考慮せずに日に基づいて MySQL レコードを選択する方法

datetime カラムを含むテーブルを操作する場合、多くの場合、次のことが必要になります。発生時刻に関係なく、特定の日のレコードを取得します。ただし、単純な日付比較の使用は非効率的であり、インデックスの使用を妨げる可能性があります。

間違った方法では、datetime 列に適用される日付関数が目的の日と一致するレコードを選択します。

SELECT *
FROM tablename
WHERE DATE(columnname) = '2012-12-25'

このクエリでは、MySQL ですべての行の日付を計算する必要がありますが、大規模なデータセットでは計算量が多く、時間がかかる可能性があります。さらに、WHERE 句で計算を使用すると、日時列のインデックスを使用したクエリの最適化ができなくなります。

代わりに、より効率的なアプローチは、1 日全体を表す日時値の範囲を定義することです。 、特定の日付の始まりと終わりが含まれていることを確認します。これは、BETWEEN 句を使用して実現されます。

SELECT *
FROM tablename
WHERE columnname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

この変更されたクエリにより、MySQL は datetime カラムのインデックスを利用できるようになり、パフォーマンスが大幅に向上します。このアプローチでは、レコードが発生した時間に関係なく、その日全体のレコードが確実に選択されることに注意することが重要です。

MySQL の最新バージョンでは、潜在的な問題を回避するために次の構文を使用することをお勧めします。あいまいさ:

SELECT *
FROM tablename
WHERE columnname >= '2012-12-25 00:00:00'
AND columnname < '2012-12-26 00:00:00'

これらのガイドラインに従うことで、MySQL での時間を考慮することなく、日に基づいてレコードを効率的に選択でき、最適なデータベース パフォーマンスを確保できます。

以上が時間を無視して日ごとに MySQL レコードを効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。