是否可以創建一個非聚集索引?什麼數據結構被用來實現非聚集索引。聚集索引和非聚集索引
回答
假設你正在談論SQL Server,那麼在創建索引時就不要指定UNIQUE
。
CREATE /*UNIQUE*/ NONCLUSTERED INDEX IX ON T(C)
作爲UNIQUE
被註釋了上述這對C
列不強制唯一性。但實際上it will still be made unique behind the scenes通過將(唯一)行定位器添加到非聚集索引鍵中。
關於數據結構聚集索引和非聚集索引都是B+ trees。
什麼數據結構被用來存儲這樣的索引? –
@java_geek - B樹。另請參見[非聚簇索引結構](http://technet.microsoft.com/zh-cn/library/ms177484(v = sql.105).aspx) –
正如馬丁史密斯所說,索引不需要是邏輯唯一但實際上,SQL Server添加一個4字節的'uniquifier'列以保證物理唯一性。
根據結構差異,非聚簇索引包括指向聚簇索引或堆指針的指針(如果尚未創建聚簇索引)。
您應該注意到,雖然它們都是B樹,但還是有其他差異 - 非聚簇索引的葉節點高1級,這可能意味着從非聚簇索引讀取可能會比從提供所需數據的聚集索引在葉節點中可用(需要的列位於索引的關鍵字中)。
下面是從聯機叢書聚集索引結構:
http://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx
這裏的非聚集索引結構:
http://technet.microsoft.com/en-gb/library/ms177484(v=sql.105).aspx
因此,從'覆蓋'非聚集索引讀取可以更快,因爲每個級別引起1個頁面讀取,因爲非聚集索引具有更少的層次來獲取數據,那麼您將產生更少的邏輯讀取意味着更少的物理磁盤讀取和更少的CPU工作。
您還應該考慮,只包含特定查詢所需的特定列的索引將意味着需要讀取更少的總頁數以抓取所有數據,從而實現更快的性能,但也要意識到您擁有的索引越多,寫入的成本就越高。
- 1. 複合聚集索引和非聚集索引在sql server 2005
- 2. 將聚集索引轉換爲非聚集索引?
- 3. 非聚集索引功能相對於聚集索引尋求
- 4. SQL非聚集索引
- 5. 加入非聚集索引
- 6. 非聚集索引和非聚集索引的區別是什麼
- 7. 聚簇索引和非聚簇索引
- 8. 同時具有非聚集索引和聚集索引的好處
- 9. 通過羣集或非聚集索引
- 10. 主鍵和聚集索引
- 11. 「聚集索引」和「句序」
- 12. 插入記錄與聚集索引或沒有聚集索引
- 13. 羣集索引和非聚簇索引 - SQL Server和Oracle?
- 14. SQL Server聚集索引 - 索引問題
- 15. 主要索引與聚集索引
- 16. 在視圖中創建聚集/非聚集索引
- 17. 包含非聚集索引的列
- 18. 禁用所有非聚集索引
- 19. 非聚集索引減慢插入?
- 20. 創建db2非聚集索引
- 21. 非聚集索引被忽略
- 22. sql server中的非聚集索引
- 23. 過濾非聚集索引異常behaivior
- 24. 獲取所有非聚集索引
- 25. 兩個SQL非聚集索引創建
- 26. SQL Server的非聚集索引設計
- 27. SQL Server 2008非聚集索引
- 28. SQL中的聚集索引
- 29. 聚集索引視圖
- 30. 聚集索引掃描
請指定你正在談論的RDBMS。 –