2010-04-08 72 views
4

以下哪項更快,還是相當? (從抓timestamp列最近期的記錄)帶時間戳條件的性能

SELECT UNIX_TIMESTAMP(`modified`) stamp 
FROM `some_table` 
HAVING stamp > 127068799 
ORDER BY stamp DESC 

SELECT UNIX_TIMESTAMP(`modified`) stamp 
FROM `some_table` 
WHERE UNIX_TIMESTAMP(`modified`) > 127068799 
ORDER BY `modified` DESC 

甚至另一個組合?

+0

HAVING旨在與GROUP BY子句一起使用 – jab 2010-04-08 11:25:15

回答

1

都等於和不那麼好的,因爲每一行的值都將被轉換爲timestamp

爲什麼不離開日期字段原樣,並轉換成唯一不變的價值?

WHERE `modified` > FROM_UNIXTIME(127068799) 
+0

我的印象是時間戳列在內部使用了一個整數,所以使用UNIX_TIMESTAMP沒有開銷。這裏有人可以證實,無論哪種方式? – 2010-04-08 11:16:44

+0

剛剛注意到你也可以這樣做: 'modified' + 0 – 2010-04-08 11:22:58

+0

@Tim可能是一些智能優化器會自動做這種轉換,但我不會依賴這個。爲什麼要使用一些無聲的魔法,而我們能寫出簡單而直接的條件呢? – 2010-04-08 11:23:59

1

只要modified被索引,這一個:

SELECT UNIX_TIMESTAMP(`modified`) stamp 
FROM `some_table` 
WHERE modified > FROM_UNIXTIME(127068799) 
ORDER BY 
     modified DESC 

是最好的解決方案,因爲它是可優化搜索,並允許在modified索引使用,不像你都查詢。

+0

謝謝。我看到你有關使用索引的觀點。 我剩下的唯一問題是哪些轉換函數的開銷最小。我不太理解爲什麼當列在內部存儲整數時使用FROM_UNIXTIME。見上面的評論主題 – 2010-04-08 11:31:24