我有一個典型的表,它具有主鍵整數Id和DateTime列以記錄行的創建時間。理論上,Id列的順序應始終與DateTime列的順序相同。我的應用程序做了ORDER BY CreateDateTime DESC
,我打算爲CreateDateTime列添加一個索引,但後來我意識到主鍵上的聚集索引應該完成相同的事情,即使它在語義上不正確,也許我應該按Id排序以防止創建另一個索引。無論如何你會添加CreateDateTime索引嗎?那麼如果它是一個LastUpdatedDateTime
列(意味着偶爾更新索引)呢?索引行Id與行DateTime
1
A
回答
1
「理論上」......如果實踐不符合理論,這有什麼關係嗎?
如果是,則創建索引並按該日期字段排序。 如果否,請使用主鍵。
1
如果您不打算進行日期範圍搜索,請不要通過主鍵添加索引和順序。我認爲語義仍然是正確的,因爲您按照插入行的順序列出。 PK正在跟蹤您的訂單,而不是DateTime。
這是假設CreateDateTime始終使用getdate()或行插入時可比較。如果您預計該日期是以其他方式創建的,那麼我將使用CreateDateTime上的索引並在Order By子句中使用該索引。
0
我有幾個場景,我們在日期時間列上有聚集索引。這可以很好地解決,因爲數據總是在增加(意味着頁面上的熱點,但沒有頁面拆分),並且幾乎所有的查詢都在日期範圍而不是上的任何其他數據。儘管這是針對大量的交易數據,而不是針對實體。
你會不會專門基於datetime列對錶進行大量查詢?如果沒有,那麼我認爲你不會從那裏的索引中受益 - 堅持實際的標識符作爲聚簇密鑰。更重要的是,如果我們正在討論最後更新的專欄 - 您的查詢中有多少百分比會使用這樣的索引?看起來好像根本不會增加你的成本(但是根據數據更新的頻率,它可能會花費你很多)。
究竟我們在談論什麼樣的實體?這些用戶,救護車,芭比娃娃,論壇帖子,火山還有其他的東西嗎?您每天,每週,每月要添加多少行?你對他們進行什麼樣的查詢?瞭解查詢的數量和類型可以在確定索引策略方面發揮重要作用。
1
使用Id。它將更好地考慮時區變化
相關問題
- 1. 熊貓:從行獲取datetime索引值
- 2. 獲得由行ID和表ID行索引
- 3. 多表格與索引行
- 4. 通行證ID(索引)onEditDetail()參數
- 5. ListView行ID和位置索引混淆
- 6. MVC4與Id和索引行動的路線
- 7. vb.net按行或單元格獲取行索引ID
- 8. Excel索引行
- 9. 索引行動
- 10. 行索引rowCommand
- 11. SQLite行ID與ListView行ID不匹配
- 12. 問題與分頁和索引行動
- 13. 將索引與提交進行比較
- 14. Linq CSV導入與行分號(索引)
- 15. R:列和行索引與最大值
- 16. Python版本的ismember與'行'和索引
- 17. Numpy Array按行搜索行索引
- 18. DATETIME vs LIKE進行動態搜索SQL
- 19. 行家索引搜索
- 20. 索引搜索估計行
- 21. ngGridEventEndCellEdit和行索引
- 22. NSTableView行的索引
- 23. Mysql多行索引
- 24. Tensorflow:每行索引
- 25. 查找行索引
- 26. 獲取行索引
- 27. indexPath的行索引
- 28. Numpy索引行爲
- 29. Oracle索引行爲
- 30. Flex mx:DataGrid行索引
您應該提供更多詳細信息並解釋您的答案。 – sabbahillel