我一直在网上搜索数据库索引的类型,但我还没有找到真正的答案。大多数页面都说有两种类型(Clustered和Non-Clustered),但有些人说不同的术语如(Simple,composite,B-tree,Bitmap,unique,non-unique,FBI,Dense,Sparse,Reverse ,. ..等)。
我知道它在DBMS之间有所不同,但为什么大多数源只有两种类型(Clustered和Non-Clustered)? SQL支持哪些类型的索引?
有人可以给我更多解释吗?
答案 0 :(得分:3)
这不是一个简单的回复。我试着在一些段落中解释这个主题,我将谈论SQL Server,作为一个RDBMS ..
当我们谈论群集/非群集和堆(hobt - >堆或b-tree)时,我们会指示"结构&# 34;其中存储了对象(表或索引视图)。事实上,堆很简单" list"物品,没有任何特定订单存储; 群集是"组织"树中的行数据(称为b+tree)按索引键排序,它们对象本身(表可以是堆或集群结构); nonclustered 与群集结构类似,但它们不代表表(也不是索引视图)。它们是指向聚集或堆底层对象的附加结构。
<强>小结强>
表(或索引视图)可以存储在堆或群集中(SQL Server只能有一个群集结构)。 表(或索引视图)可以具有多个附加结构作为非聚簇索引,以便具有多种访问数据。每个非聚簇索引都将指向堆或聚簇的底层对象,具体取决于数据的组织方式(取决于您是否创建了聚簇)
那就是说,我们可以说非堆结构可以支持各种索引:
上面的索引是最常用的(根据我的经验),但我们也可以添加:
最后,您还可以获得一组有关索引的概念,这些概念不是索引类型,但您可以听到它们:
希望这有帮助。
答案 1 :(得分:0)
取决于您对索引类型的含义。每个索引都必须是聚簇的或非聚簇的,并且只能对表中的一个索引进行聚类。但是,有一些特殊类型的索引具有其他属性,例如唯一或索引中有多个字段(复合索引)等。