ホームページ >データベース >mysql チュートリアル >時間コンポーネントを使用せずに MySQL で日付を効率的に比較するにはどうすればよいですか?
効率的なmysql日付比較:時間コンポーネントを無視する
頻繁に、データベースクエリには、時間コンポーネントを考慮せずに日付を比較する必要があります。 MySQLは、これを効率的に達成するためにいくつかの機能を提供します
シナリオ:
の列をplayers
にus_reg_date
にDATETIME
にある
非効率的なアプローチ(およびそれが失敗する理由):
最初の試みには、CONVERT
を使用して日付部分を抽出することが含まれる場合があります。
<code class="language-sql">SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10';</code>このアプローチは非効率的であり、エラーが発生しやすいです。
関数はデータ型を変更し、効率的なインデックス使用量を妨げます。 さらに、日付の直接文字列比較は、予期しない結果につながる可能性があります。
CONVERT
より効率的で正確な方法は、mysqlの組み込み日機能を活用します:
このクエリは
値を直接比較します。 重要な部分は<code class="language-sql">SELECT * FROM players WHERE us_reg_date >= '2000-07-05' AND us_reg_date < DATE_ADD('2011-11-11', INTERVAL 0 DAY);</code>を使用することです。これは、「2011-11-11」の真夜中までのすべての日付を巧みに選択しますが、「2011-11-10」全体を効果的に網羅しています。 このアプローチは、最適なクエリパフォーマンスのためのインデックスの使いやすさを維持します。 あるいは、より明確な意図に使用することもできますが、直接的な比較よりもわずかに効率が低い場合があります。
この洗練された方法により、データベースのパフォーマンスを維持しながら、正確な日付のみの比較が保証されます。
以上が時間コンポーネントを使用せずに MySQL で日付を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。