應該在表上使用哪種類型的索引?它最初被插入(一個月一個)到一個空表中。然後我在兩列上放置一個非聚集的複合索引。想知道如果將兩個字段合併爲一個字段會在搜索時提高性能。或者沒有關係?我應該使用具有主鍵聚集索引的標識列嗎?在一張擁有超過2億行的表中搜索記錄
0
A
回答
0
您應該在人們查詢表格時將最有可能在where子句中使用的字段編入索引。不要擔心主鍵 - 它已經有一個索引。
0
如果你可以定義查詢表時,可以使用一個唯一的主鍵,這將被用來作爲聚集索引,將是最快的選擇。
如果您的選擇查詢必須使用您提到的兩個字段,請將它們分開。性能不會受到影響,架構也不會受到影響。
0
「對於經常搜索值範圍的列,聚簇索引特別有效,在使用聚簇索引找到具有第一個值的行後,具有後續索引值的行保證在物理上相鄰。
考慮到這一點,除非它對您的應用程序有商業意義,否則在您的主鍵(ID)上擁有聚簇索引可能不會看到很多好處。如果你有一個日期值,你通常查詢,那麼它可能更有意義,一個聚集索引添加到
select * from table where created > '2013-01-01' and created < '2013-02-01'
我見過datawarehouses使用級聯的重要途徑。這是否適用於您取決於您的疑問。很顯然,查詢單個字段值的速度會比多個字段更快,特別是當B樹索引中查找少一個時。
或者,如果你有一個表200萬行,你可以看一下打破了數據輸出到多個表,如果它是有道理這樣做。
你是說你每個月都加載所有這些數據,所以我必須假設所有的數據都是相關的。如果表中的數據被認爲是「舊」且與搜索無關,則可以將數據移出到歸檔表(使用相同的模式),以便您的查詢僅針對「當前」數據運行。
否則,你可以看看分片的方法,就像MongoDB一樣使用NoSQL。如果MongoDB不是一個選項,那麼可以在應用程序中實現與邏輯相同的分片鍵。我懷疑你的數據庫SQL驅動程序本身會支持分片。
相關問題
- 1. 數據庫設計 - 一張表中有數十億條記錄?
- 2. 在同一張表中搜索另一張表中的常見記錄的更新記錄
- 3. 使用Hibernate查找一張擁有100萬條記錄的表
- 4. 從包含2億條記錄的表中選擇一些記錄
- 5. 將一張表中的所有記錄與另一張表中的所有記錄進行比較
- 6. 對於擁有3億多記錄的MySQL表,有哪些優化技術?
- 7. Sl_log表龐大,超過1億行
- 8. 只在一張表中搜索
- 9. 如何向擁有10億條記錄的BAM BizTalk表添加新列
- 10. 搜索1億條記錄時的性能
- 11. 具有超過十億行的表的Postgres性能
- 12. LOAD INFILE 2億加記錄速度
- 13. 在同一張表中複製記錄
- 14. 執行兩張表時沒有記錄
- 15. 如何爲超過一百萬條記錄的MySql表索引
- 16. 如何更新25 GB的大型表,超過3.5億條MyISAM記錄?
- 17. 如何在搜索表單中搜索多條記錄?
- 18. 將新列和索引添加到具有十億條記錄的表中
- 19. 查找所有記錄超過一年
- 20. Mysql搜索1.18億行需要86秒
- 21. 如何將一張表中的記錄插入第二張表
- 22. 在有很多記錄的大表中搜索/查詢
- 23. 星火。 〜1億行。大小超過Integer.MAX_VALUE?
- 24. 添加一個自動編號,其擁有超過15萬條記錄
- 25. 想根據搜索字符串搜索表中的記錄
- 26. LINQ的 - 搜索表記錄中包含搜索字符串
- 27. 如何在表中有數百萬條記錄時對錶進行搜索
- 28. 如何通過REST API搜索內存表中的記錄?
- 29. 如何在兩張表中搜索?
- 30. 正在搜索記錄