如果我沒有弄錯聚簇索引根據一些自定義順序在磁盤上物理排序表的行。我假設表格存儲在文件中(也許每個表格有一個文件?)。那麼不過,假設有人在表格中插入一個「新行」,並且應該放置在開始處。數據庫然後需要在文件中物理地移動整個表格(所有行)?是不是太慢或有沒有任何優化技術如何在插入後實現排序順序?插入聚簇索引表
插入聚簇索引表
回答
表格不一定存儲爲文件。從邏輯上講,它們存儲在頁面中。假設每個頁面有100行,並且在需要時可以保存額外的20行。然後將所有頁面鏈接在一起以製作整個表格數據。
就你而言,當你在開始時添加一個新行時,只需更改第一頁,只需移動100行。如果您一遍又一遍地執行該操作,那麼當該頁面的行數超過120時,該頁面將被拆分爲兩個鏈接在一起的新頁面。
是啊,你是對的,我的錯誤。 – 2012-07-22 15:17:26
我只想補充一下。 。 。 「表格不一定存儲爲文件」。數據庫可以存儲不管他們喜歡的表,並且一些支持SQL的數據庫可能會選擇將表放入文件中。大多數不這樣做,但這是編寫引擎的人的設計決定。 – 2012-07-22 16:13:02
好點。當然,任何數據庫都可以將表格保存到文件。我對這個問題給出了一個總體的看法。但在大多數情況下以及大多數DBMS(如Oracle,DB2或SQL服務器)中,它都是這樣的:行 - >頁 - >表 - >文件或磁盤。根據你的觀點,我會編輯我的回覆。 – 2012-07-22 19:14:11
- 1. 聚簇索引
- 2. 非主鍵列上的聚簇索引或非聚簇索引?
- 3. 瞭解聚簇索引
- 4. 改變聚簇索引列
- 5. 帶聚簇索引的文件表
- 6. 混淆了聚簇索引和非聚簇索引。包含5個疑問
- 7. SQL Server性能:非聚簇索引+ INCLUDE列與聚簇索引 - 等效嗎?
- 8. 儘管有聚簇索引,SQL Server仍在使用非聚簇索引
- 9. SQL Server「一次寫入」表聚簇索引
- 10. Azure無法識別聚簇索引
- 11. H2數據庫:聚簇索引支持
- 12. 更改sybase中的非聚簇索引
- 13. 在nhibernate中設置聚簇索引
- 14. SqlServer聚簇索引存儲(> 1列)?
- 15. MySql錯誤1064唯一聚簇索引
- 16. Sybase非聚簇索引選擇
- 17. 插入記錄與聚集索引或沒有聚集索引
- 18. SQL Server中唯一標識符列上的聚簇/非聚簇索引
- 19. 爲什麼SQL索引視圖始終使用聚簇索引
- 20. SQL Server索引 - HEAP上的非聚簇索引
- 21. 已過濾索引與正常非聚簇索引
- 22. 在SQL中禁用聚簇索引的方法和哪個列會創建默認非聚簇索引?
- 23. 包含vs的非聚簇索引與幾乎相同的非聚簇索引無關;多個查詢範圍
- 24. 爲什麼QO選擇聚簇索引掃描與表掃描?
- 25. DELETE命令在帶聚簇索引的表中速度太慢
- 26. 如何停止DataContext.CreateDatabase爲表的主鍵創建聚簇索引?
- 27. 表掃描和聚簇索引掃描有什麼區別?
- 28. 檢查表列上是否存在非聚簇索引
- 29. 在臨時表上添加聚簇索引以提高性能
- 30. 非聚集索引減慢插入?
什麼RDBMS? SQL Server? – 2012-07-22 15:08:26
如果您正在談論** SQL Server ** - 那麼數據將以8K頁的形式保存在一個平衡的b-tree結構中。在表格中插入新行的位置幾乎是不相關的 - 可能或可能不需要執行某些步驟,但它肯定是**而不是「順序」文件類結構,需要轉移到當插入一個新行時......回到 – 2012-07-22 15:59:19