2011-04-11 75 views
16

我有一堆表合併不同級別的數據:季度,小時,每日和每月。除此之外,還有一個包含「原始」數據的基表,其中包含一些額外的列。統一表格都有相同的列。SQL Server日期vs smalldatetime

基部,季度和每小時表利用smalldatetime類型的一列的成時間戳的數據。本專欄也將在小時和每日表格中提供,但當然我不需要這裏的時間方面。

爲了簡單起見我想在這裏也使用SMALLDATETIME數據類型的緣故,但也許這是更好地爲性能,使用該列的日期數據類型?

有各類型之間一個非常大的差異,當它歸結爲表現?

+1

SMALLDATETIME在SQL Server 2008中已棄用。使用DATE,TIME或DATETIME2。 http://msdn.microsoft.com/en-us/library/ms182418.aspx – sqlvogel 2011-04-11 13:46:07

+0

謝謝。那麼我的問題最終會是相同的:日期時間vs日期 – 2011-04-11 13:50:08

+3

@dportas:smalldatetime是*不*棄用:它也是ANSI的標準類型。 – gbn 2011-04-11 14:37:07

回答

13

使用您需要的最小數據類型通常是個好主意。您不應該使用varchar(max)或甚至varchar(10)來存儲2個字符的狀態縮寫。

在相同的意義,如果你只需要日期(例如2001年4月11日),然後使用日期類型,而不是DateTime類型。

雖然它可能不是在性能上大幅度的提高(日期時間比日期大5個字節)。它可以開始添加,如果你有多個域和/或多行。

+2

是的,我同意。找到關於這個主題的好文章:http://www.mssqltips.com/tip.asp?tip=1616。不是關於性能,而是存儲日期的不同解決方案的比較。 – 2011-04-11 14:06:06

4

各種數據類型有各種各樣的數據類型size其中影響數據/索引的大小,這比查詢性能(I/O成本)更重要。

另一方面,數據類型之間的轉換可能是昂貴的。此外,各種數據類型之間的隱式轉換可能是錯誤/意外的。

我會保持一種類型的日期(在這種情況下4個字節smalldatetime),如果你表之間的連接上的日期列,或者如果不能保持儘可能小的日期型 - smalldatetime用於存儲小時,宿舍和date日期。

0

不幸的是在smalldatetime的情況下,這對我來說使用BCP(批量複製)實用程序用於出口/進口業務時造成麻煩。 BCP導入似乎不喜歡smalldatetime字段(至少它們是由BCP導出的)。版本與SQL Server 2008一樣晚,在bcp中使用「native」格式。因此,我將在未來使用datetime作爲我的工作,因爲我喜歡能夠使用bcp移動數據。