是否可以创建一个非聚集索引?什么数据结构被用来实现非聚集索引。聚集索引和非聚集索引
回答
假设你正在谈论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。 –