Sql-Server

日期時間列與日期 + 時間列

  • May 27, 2014

我正在為一個保存許多日誌的系統設計一個表。我們正在查看每秒約 200 個條目。

我們使用的是 SQL-Server 2012 企業版。

我有一個關於將一Datetime列分成兩列的問題,Date並且Time.

我對這個問題的思考。我想說,一旦數據儲存在數據庫中,大多數搜尋將基於每天,給我今天/1 月 10 日的所有結果。

現在我仍然需要儲存時間。因此,如果我將其儲存為datetime,則在執行此查詢時,sql 將不得不載入整個datetime欄位,然後只查看一半的數據。

因此,通過可能將日期儲存在自己的欄位中,它可以只查看它需要的內容。

但是另一方面,如果您確實在查詢中指定了時間,它現在必須檢查兩列的值。

因此,我想從您的 SQL 專家那裡獲得關於哪個選項對於大型數據庫的查詢具有更好的性能的輸入。

據我所知datetime,可以進行高度優化,並且是比拆分更好的解決方案。

在這一點上,我將使用 DATETIME2 而不是 DATETIME 進行任何新的開發工作。如果您不需要亞秒級粒度,請使用 DATETIME2(0),您也會看到一些空間節省。

從這裡我會開始嘗試。如果僅查詢單個列的性能很差,我會嘗試添加持久計算列來分離日期和時間組件。這將確保分隔的 DATE 和 TIME 列將始終與“主”DATETIME2(n) 列相同。

我建議兩列:DATEDATETIME2(p),將精度設置p為支持需求和優化儲存所需的最小值。然後適當地索引它們(可能與其他列組合)以支持您的查詢。

如果您的大多數查詢將僅使用日期,則為它設置一個單獨的列是有意義的,並帶有適當的索引來支持查詢。一種選擇是使日期列成為PERSISTED 計算列(從 datetime2 列計算)。有關索引計算列的詳細資訊,請參閱此 BOL 連結

引用自:https://dba.stackexchange.com/questions/65955