2016-12-06 47 views
0

考慮以下兩個查詢(其中一個使用DATE()函數從日期時間字段中提取日期,另一個不使用)。提取日期時間部分的日期時間真的有必要嗎?

SELECT count(*) 
FROM creatives 
WHERE DATE(creative_last_seen) >= SUBDATE(CURDATE(), 1) 
AND DATE(creative_last_seen) < curdate(); 

總響應時間:1分19秒

SELECT count(*) 
FROM creatives 
WHERE creative_last_seen >= SUBDATE(CURDATE(), 1) 
AND creative_last_seen < curdate(); 

總響應時間:8.9秒

兩個查詢據我可以告訴產生相同的結果。由於日期提取的第一個查詢花費了大量的時間,而另一個則顯着更快。

我最初認爲我需要使用DATE()函數來使查詢工作。但它似乎沒有DATE()函數就可以正常工作。我是否通過使用後者的查詢來丟失任何東西?

回答

0

日期類型用於值與日期的一部分,但沒有時間部分
的DATETIME類型用於同時包含日期和時間部分值

作爲creative_last_seendatetime數據類型,它包括在比較過程中將考慮時間部分。

如果你只對date比較不time興趣,如果你想time部分應該比較時要考慮再與第二個查詢

DEMO

去,你可以使用第一查詢

select NOW() > CURDATE(); 
# output : 1 

select date(NOW()) > CURDATE(); 
# output : 0 
相關問題