2016-11-09 28 views
0

使用SQL Server 2014:當我不需要存儲秒時,不使用SMALLDATETIME的任何好理由?

我與幾個大的日誌表工作和他們的一列是數據類型DateTimeCreateDate

有幾個索引基於CreateDate列。所有表格已經包含大量的行。

問題#1:是否有任何理由不將所有CreateDate列轉換爲SMALLDATETIME類型?

問題2:有,現有的DATETIME數據轉換成SMALLDATETIME沒有任何錯誤任何安全ALTER TABLE表語句?

問題3:當我使用ALTER TABLE時,現有索引會根據CreateDate而發生什麼變化?

+0

根據MSDN,它建議其他數據類型的新工作。這可能意味着該功能在未來版本中可能會被棄用,但他們並未明確表示這一點。 https://msdn.microsoft.com/en-us/library/ms182418.aspx – dfundako

+2

或者,如果您還沒有使用企業版,並且使用頁面壓縮功能,則每次可節省遠遠超過4個字節行。由於問題四捨五入,SMALLDATETIME真的非常糟糕。它不會忽略秒,它可以讓你的時間戳跳到未來。只有很少的日誌可以誠實地說這種精度降低並不重要。 –

回答

1

是的,你可以用小日期時間數據類型的情況。

與SMALLDATETIME

SMALLDATETIME處理時,該警告將有一個不每毫秒時間爲0秒。但請注意,小日期時間會將分鐘值舍入到最接近的分鐘值。

示例如果您的日期時間列包含值'2016-08-06 11:49:31.667'。那麼小日期時間值將是'2016-08-06 11:50'。它將日期時間舍入到最接近的第50分鐘,實際上是第49分鐘。

的方式,我認爲最好的修改數據

我的建議是與SMALLDATETIME數據類型創建一個多個列。並通過將日期時間列轉換爲smalldatetime來更新它。並放下您的日期時間列。

索引器部分更改數據類型時

來到索引器。您可以在此列上創建相同的索引器。據我所知在Smalldatetime上使用索引器比在datetime上使用索引器好。由於日期時間值以毫秒爲單位在每列的最大值上不同。

我希望這個信息可能會幫助你。

0

老實說,我認爲,如果它不破,不改變它。至少,不要在沒有全面調查和計劃的情況下改變它。這裏的原因:

  1. 有可能是基於你不知道的數據類型的依賴。如果這是一個成熟的產品,即它在過去幾個月內還沒有創建,那麼如果更改數據類型,那麼您可能不知道那些列或列可能會中斷的所有內容。

  2. 精度可能是有人重要的地方。

  3. 保存的數據。是的,SmallDateTime是half DateTime的size,但取決於你有多少記錄和表有多大,這對你來說可能不是什麼大問題。是的,較小的數據量可能會使事情稍微快一點。

相關問題