数据库索引的实际类型是什么?
What are the actual types of database indexes?
我一直在网上搜索数据库索引的类型,但没有找到真正的答案。大多数页面说有两种类型(集群和非集群),但其他一些页面说不同的术语,如(简单、复合、B 树、位图、唯一、非唯一、FBI、密集、稀疏、反向、. ..等)。
我知道 DBMS 之间的区别,但为什么大多数源只有两种类型(集群和非集群)? SQL 支持哪些类型的索引?
谁能给我更多解释?
取决于您所说的索引类型是什么意思。每个索引都必须是聚集的或非聚集的,并且 table 中只有一个索引可以聚集。然而,有些特殊类型的索引还具有其他属性,例如唯一性或在索引中具有多个字段(复合索引)等。
这不是简单的回复。我尝试在某些段落中解释该主题,我将谈论 SQL 服务器,作为 RDBMS..
当我们谈论 Clustered/Nonclustered 和 堆(hobt --> 堆或 b-tree)时,我们'表示 "structures" 对象(table 或索引视图)存储在其中。实际上,堆 是简单的 "list" 项目,存储时没有任何特定顺序; clustered 是 "organize" 行数据 在树中的结构(称为 b+tree)按索引键和 它们是对象本身(table可以是堆或集群结构); nonclustered 类似于集群结构,但它们不代表 tables(也不代表索引视图)。它们是指向集群或堆底层对象的附加结构。
回顾
table(或索引视图)可以存储在堆中或集群中(SQL 服务器可以只有一个集群结构)。
table(或索引视图)可以具有多个附加结构作为非聚集索引,以便具有多种访问数据。每个非聚集索引将指向堆或聚集底层对象,具体取决于数据的组织方式(这取决于您是否创建了聚集)
也就是说,我们可以说非堆结构可以支持各种索引:
- simple/composite 实现:集群或非集群,仅使用一个键进行索引,该键是单个列键或一组列。
- 唯一索引:聚集或非聚集,它只支持每行一个值(在索引的键上)。它与保证值唯一性的 "unique constraint" 或 "primary key constraint" 有关。 unique 和 pk 的区别在于 pk 不接受 NULL 值。
- 覆盖索引:只是非聚簇的,因为聚簇结构里面有记录。它是一个索引,在叶(记住,它是一棵树)中包含一组列(INCLUDE 子句)。之所以称为覆盖索引,是因为它是覆盖某个查询的索引,而不查找底层对象。
- 过滤索引:只是非聚集索引,因为你不能过滤掉存储为聚集结构的table部分。它是一个带有 WHERE 子句的索引,它只考虑底层对象的一部分。条件必须是确定性的(例如,您不能使用 WHERE StartDate >= GETDATE())。
上面的索引是最常用的(根据我的经验),但我们还可以添加:
- 计算列上的索引
- 空间索引
- XML 索引
- Full-text 索引
- 列存储索引(从 2012 年开始)
- 内存优化索引(从 2014 年开始)
最后你也可以有一套关于索引的概念,它不是索引的类型,但你可以听到它们:
- 重叠索引
- 重复索引
- 缺少索引
- 未使用的索引
希望对您有所帮助。
我一直在网上搜索数据库索引的类型,但没有找到真正的答案。大多数页面说有两种类型(集群和非集群),但其他一些页面说不同的术语,如(简单、复合、B 树、位图、唯一、非唯一、FBI、密集、稀疏、反向、. ..等)。
我知道 DBMS 之间的区别,但为什么大多数源只有两种类型(集群和非集群)? SQL 支持哪些类型的索引?
谁能给我更多解释?
取决于您所说的索引类型是什么意思。每个索引都必须是聚集的或非聚集的,并且 table 中只有一个索引可以聚集。然而,有些特殊类型的索引还具有其他属性,例如唯一性或在索引中具有多个字段(复合索引)等。
这不是简单的回复。我尝试在某些段落中解释该主题,我将谈论 SQL 服务器,作为 RDBMS..
当我们谈论 Clustered/Nonclustered 和 堆(hobt --> 堆或 b-tree)时,我们'表示 "structures" 对象(table 或索引视图)存储在其中。实际上,堆 是简单的 "list" 项目,存储时没有任何特定顺序; clustered 是 "organize" 行数据 在树中的结构(称为 b+tree)按索引键和 它们是对象本身(table可以是堆或集群结构); nonclustered 类似于集群结构,但它们不代表 tables(也不代表索引视图)。它们是指向集群或堆底层对象的附加结构。
回顾
table(或索引视图)可以存储在堆中或集群中(SQL 服务器可以只有一个集群结构)。 table(或索引视图)可以具有多个附加结构作为非聚集索引,以便具有多种访问数据。每个非聚集索引将指向堆或聚集底层对象,具体取决于数据的组织方式(这取决于您是否创建了聚集)
也就是说,我们可以说非堆结构可以支持各种索引:
- simple/composite 实现:集群或非集群,仅使用一个键进行索引,该键是单个列键或一组列。
- 唯一索引:聚集或非聚集,它只支持每行一个值(在索引的键上)。它与保证值唯一性的 "unique constraint" 或 "primary key constraint" 有关。 unique 和 pk 的区别在于 pk 不接受 NULL 值。
- 覆盖索引:只是非聚簇的,因为聚簇结构里面有记录。它是一个索引,在叶(记住,它是一棵树)中包含一组列(INCLUDE 子句)。之所以称为覆盖索引,是因为它是覆盖某个查询的索引,而不查找底层对象。
- 过滤索引:只是非聚集索引,因为你不能过滤掉存储为聚集结构的table部分。它是一个带有 WHERE 子句的索引,它只考虑底层对象的一部分。条件必须是确定性的(例如,您不能使用 WHERE StartDate >= GETDATE())。
上面的索引是最常用的(根据我的经验),但我们还可以添加:
- 计算列上的索引
- 空间索引
- XML 索引
- Full-text 索引
- 列存储索引(从 2012 年开始)
- 内存优化索引(从 2014 年开始)
最后你也可以有一套关于索引的概念,它不是索引的类型,但你可以听到它们:
- 重叠索引
- 重复索引
- 缺少索引
- 未使用的索引
希望对您有所帮助。