2012-02-07 37 views
0

我有大表,包含DateTime列以存儲我的應用程序中某些事件和動作的確切時間。在某些情況下,用戶可以輸入事件的日期。處理日期排序以達到更好性能的最佳方法?

我想驗證事件序列,發現事件發生的時間,等等。

如果我通過DateTime訂購事件,它在大數據中很耗時。如果我通過Id訂購,沒有保證用戶數據輸入是有序的,用戶也不負責確定序列(他們只是輸入日期時間)。我更喜歡用數字字段而不是DateTime來排序。

你有什麼建議?

回答

1

請記住,日期時間將自固定時間點(通常爲1970年1月1日)以整數數量的刻度存儲。爲了比較日期時間,它只是這個單一值的整數比較,它不需要比較年份,月份,日期等。這是除非您將日期存儲爲字符串,而不是日期時間。

我的猜測是你的數據庫在內部存儲按ID排序的數據,而且ID也是索引的,這就是爲什麼這麼快。你的問題不是在數據時間排序,它只是在非ID列上排序。正如裏德所說,你可能只需要索引列。你也可能在某個地方以某種你不應該做的事情做事。很難說如果沒有看到代碼,數據庫配置等等,可能會出現什麼情況。

+0

明白了!謝謝Servy。 – 2012-02-07 18:51:46

2

如果您的數據庫已將該列編入索引,則通過DateTime列排序不應該很慢,即使對於大數據也是如此。

我個人會直接在DateTime(帶有db的索引)上進行排序,但要確保您的LINQ查詢將結果限制在適當的日期窗口中。

+0

你的意思是在索引日期時間和超過14,000,000條記錄的bigint之間沒有大的區別? – 2012-02-07 18:43:01

+0

@Reza否 - 存儲在數據庫中的DateTime實際上是一個數字。如果您將其編入索引,則在查詢其他檢查時將會有類似的速度...... – 2012-02-07 18:51:15