2016-04-14 8 views
0

インデックスが付けられたdatetime列のテーブルがあります。私は特定の日付のすべての行を選択したいと思います。以前私はこれを使用してきた:datetime = dateの行を選択してインデックスを使用します。

SELECT * 
FROM `table` 
WHERE DATE(date_column) = '2016-04-12'; 

これは正常に動作します、しかし、私が原因私はDATE()機能を適用すると、MySQLはインデックスを利用していないという事実のためにパフォーマンスの問題に気付いてきました。私も試しました:

SELECT * 
FROM `table` 
WHERE SUBSTR(date_column,1,10) = '2016-04-12'; 

を利用できません。これまでのところ、動作しているようです唯一のことは、次のとおりです。

SELECT * 
FROM `table` 
WHERE date_column >= '2016-04-12' 
    AND date_column < '2016-04-13' 

この最後のクエリが正常にインデックスを使用していますが、私はただ一つの条件でこれを行う方法があるかどうかを知りたいのです。

+0

最初のクエリで 'date_column = '2016-04-12 00:00:00.000''を使用しないのはなぜですか?または、それは2016年4月12日の最後の2分の1秒の間です。 – Edu

答えて

1

私はこのコードパターンが好きです。それは(深夜オーバーなしの混乱)、明確な正確で、インデックスを使用することができます。

WHERE date_column >= '2016-04-12' 
    AND date_column < '2016-04-12' + INTERVAL 1 DAY 

それもなどDATEDATETIMETIMESTAMPDATETIME(6)

'2016-04-12 00:00:00.000'のために '正しく' 動作することと同じです'2016-04-12'を使用してください。私は後者がより簡潔であるので好む。

+0

ありがとう、これは私がすでに持っているものに非常に似ています - 私は正しく動作するように最後のクエリを改訂しました。私が求めている質問は、1つの条件でこれを行う方法です。 – billynoah

+0

インデックスを使用するには、「範囲」が必要です。 (ええ、オプティマイザはよりスマートにすべきですが、そうではありません)。 –

関連する問題