2016-02-28 79 views
-1

下面的查詢在沒有dateVon2和dateBis2的情況下完美運行,但是如果我在WHERE子句中添加這兩列,則需要很長時間才能執行。SQL日期時間性能

如何加快此查詢?

SELECT * 
FROM table 
WHERE dateVon1>= CAST('01.01.2014 00:00.000' AS DATETIME) 
AND dateBis1< (CAST('10.11.2015 00:00.000' AS DATETIME)+1) 
AND dateVon2>= CAST('01.01.2014 00:00.000' AS DATETIME) 
AND dateBis2 < (CAST('10.11.2019 00:00.000' AS DATETIME)+1) 
+0

將日期存儲爲日期,並將它們編入索引。並且不要使用'SELECT *'。但是你究竟想要做什麼? – Strawberry

+0

我可以彌補的一些事情:\t 首先:確保您在該列上有相關索引。其次:不要在WHERE表達式的日期時間列上使用任何函數(如CAST)。 – FallAndLearn

+0

我不明白'CAST('01 .01.2014 00:00.000'AS DATETIME)'表達式可以返回除NULL之外的任何內容。我很疑惑這個查詢是如何返回多於零的行的,這個查詢在'dateVon2'和'dateBis2'列上有或沒有謂詞。我很難協調問題中提供的查詢文本與報告的行爲:它「完美運行」。 – spencer7593

回答

1

請勿使用CAST。

以原始格式執行狀態日期:'2014/01/01'

請勿使用+1。改爲:+ INTERVAL 1 DAY

但是... WHERE子句不能變得非常有效。 「間隔」測試很困難。關於您可以做的最好的是:

INDEX(dateVon1) -- adding more columns won't help 

WHERE dateVon1 >= '2014/01/01' 
    AND ...