我將不得不將10億個代碼插入到SQL Server數據庫表中。 我將爲此使用BULK INSERT。 我的問題是:我應該在插入數據之前還是之後創建索引?我需要最快的選項表數據庫上的索引
表數據庫上的索引
回答
之前創建索引。 BULK INSERT負責優化索引。
編輯:這似乎是唯一的,如果輸入數據是由索引排序。從http://msdn.microsoft.com/en-us/library/ms188365.aspx:
ORDER({列[ASC | DESC]} [ ,... n])的
指定如何在數據 文件中的數據進行排序。如果要導入的數據 根據 聚集索引的表進行排序批量導入 性能提高,如果 任何
真的嗎?事先創建索引在MsSQL服務器上是最佳的?我遇到的其他引擎證明完全相反。你有沒有關於爲什麼是這樣的信息?我對聽到內部消息非常感興趣。 – Christopher 2011-05-06 11:10:34
擴大我以前的評論。如果你想將這些數據插入到Postgres中,請確保執行以下操作:1.如果該表尚不存在,則在插入操作的同一個事務中創建表(使用COPY); 2.在創建索引後數據已被插入。與插入操作相同的事務中創建表確保引擎將跳過預寫日誌。任何狀況之下;如果該表存在或不存在,您將等待插入後創建索引。 – Christopher 2011-05-06 11:16:05
我以爲我在文檔中閱讀它。我只是重新檢查,似乎只適用於特殊情況:批量插入有一個「ORDER」選項,這將提高性能,如果輸入數據由索引排序。 – grimmig 2011-05-06 11:19:21
1十億記錄到一個表?哎喲。如果您正在處理該級別的數據量,並且您必須在論壇上提出這個問題,那麼您可能超出了您的要求。您應該在插入後創建索引,但要確保插入後統計信息在表格上更新。如果統計數據不是最新的,該指數將對您有用。
「如果你正在處理這個級別的數據量,你必須在論壇上提出這個問題」的確如此。具有這些記錄數據庫的操作非常棘手,只有經驗豐富的專家才能真正掌握相關知識。如果這個人不在某個地方從事某種類型的專家的學習,那麼他幾乎是頭昏腦脹。 – HLGEM 2011-05-06 14:45:12
當在插入過程中表上有索引時,服務器將需要不斷重新排序/分頁表以保持索引保持最新狀態。如果刪除索引,則只需添加行而不用擔心,然後在重新創建索引時一次構建索引。
閱讀關於Bulk Insert。
另請參考:
- 1. 數據庫上的抓取和索引
- 2. MySQL數據庫上的位圖索引
- 3. 索引在Oracle數據庫中的表
- 4. 數據庫索引?
- 5. 數據庫索引
- 6. 搜索索引與數據庫索引
- 7. 索引在索引數據庫中搜索索引數據庫時出錯
- 8. 加入索引(不是數據庫索引)的右表
- 9. URL的數據庫索引
- 10. 在Heroku上管理數據庫索引
- 11. 索引SQLite數據庫:空索引?
- 12. Elasticsearch索引數據庫表列結構
- 13. 數據庫索引B樹和列表
- 14. Postgres數據庫繼承,子表上的索引
- 15. 創建數據庫索引Vs用戶爲表創建索引
- 16. Magento索引數據庫表名重新索引?
- 17. 數據庫索引混淆
- 18. 數據庫位圖索引
- 19. 數據庫索引示例
- 20. android數據庫索引
- 21. 自動數據庫索引
- 22. Solr - 索引MySQL數據庫
- 23. 數據庫位置索引
- 24. 果園 - 數據庫索引
- 25. 數據庫索引:例
- 26. 索引數據庫幫助
- 27. 複合數據庫索引
- 28. 如何使用索引從數據庫索引數據
- 29. 從數據庫索引數據
- 30. 涵蓋索引與集羣索引(數據庫索引)
爲什麼不基準的兩個選項與100000點的代碼? – blubb 2011-05-06 11:13:38