2009-11-01 38 views
9

這包括兩個問題:MySQL中datetime列的時間戳速度要快多少?

  1. 是MySQL的時間戳字段真快於查詢「按訂單」日期時間字段?

  2. 如果上述問題的答案是肯定的,它可能會快多少?假設在一個1億行的表中,並經常根據MySQL中的時間戳字段對一堆100-200k行進行排序,通過在外部程序中將時間戳轉換爲可讀的字符串格式,排序時間改進是否會被取消?

回答

9

找出最簡單的方法是編寫一個單元測試,並實際獲得一些數字。

我的理論是,時間戳會更快,但按照這個博客我錯了: http://dbscience.blogspot.com/2008/08/can-timestamp-be-slower-than-datetime.html

這就是爲什麼我傾向於得到的數字,通過分析,我才決定在哪裏進行優化,因爲我的直覺感覺有時可能是相當錯誤的。

因此,它可能取決於您使用的MySQL版本,但看起來datetime可能會更快。

+1

同樣的故事在這裏:http://www.dbtuna.com/article.asp?id=36 – 2009-11-01 04:37:10

3

從我所知道的來看,使用TIMESTAMP超過DATETIME的主要好處是能夠自動將值設置爲行創建的當前時間,並且可以將其設置爲(或者稍微省力一點)到行更新的當前時間。這允許自動創建和修改日期。

因爲TIMESTAMP列的其他限制(例如,不被接受一定範圍內的或改變,如果服務器時區的變化以外的日期),DATETIME將是最好,如果你不需要一以上兩個特徵。但是,如果你只是希望在數據庫中存儲一個Unix時間戳,而不需要數據庫來轉換它,那麼你可以直接將它存儲爲一個無符號整數,並獲得稍微的性能。

+0

@Jason:您認爲將參數設置爲NOW()會怎樣? – 2009-11-01 04:54:56

+0

我知道。不同之處在於TIMESTAMP值在INSERT或UPDATE中未被指定的情況下被設置。就我個人而言,我使用DATETIME,我的數據庫抽象層爲我自動更新創建和修改的字段。 – Jason 2009-11-01 04:58:59

+0

@Jason,謝謝你的輸入。在這種情況下,我只關心數據排序性能,時間戳字段的範圍限制不成問題。我知道timestamp字段的另一個優點是對於1億行表,它需要381.5MB的磁盤空間。 – jack 2009-11-01 04:59:08