在聚簇索引和非聚簇索引之间混淆。包含5个疑点

时间:2010-09-03 03:50:23

标签: rdbms indexing

群集和非群集索引是否都适用于B-Tree?我读到聚簇索引会影响数据在表中的物理存储方式,而对于非聚簇索引,会创建一个单独的列副本,并按排序顺序存储。此外,默认情况下,Sql Server在主键上创建聚簇索引。

这是否意味着:

1)非聚簇索引比聚簇索引占用更多空间,因为列的单独副本存储在非聚簇索引中?

2)当我们有基于两列的主键时,群集和非群集索引如何工作?(StudentName,Marks)?

3)只有两种类型的索引吗?如果是这样,那么什么是位图索引?我似乎无法在Sql Server Management Studio中找到任何这样的索引类型,但在我的数据仓库书中,提到了所有这些类型。

4)在主键上创建聚簇索引还是非聚簇索引?

5)假设我们在名称上创建聚簇索引,即数据以名称排序顺序物理存储,然后创建新记录。新记录如何在表格中找到它?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

索引是与实际数据页分开存储的结构,只包含指向数据页的指针。在SQL Server索引中是B-Trees。

聚簇索引根据为索引定义的列对表中的数据页进行排序和存储。在SQL Server 2005中,您可以向索引添加其他列,以便在具有复合主键时不会出现问题。您可以将聚类索引视为一组带文件夹的文件柜。在第一个绘图中,您有以A开头的文档,在该绘图的第一个文件夹中,您可能有从AA到AC的文档,依此类推。要搜索“蜘蛛”,您可以直接跳到S画面并查找包含“SP”的文件夹,并快速找到您要查找的内容。但很明显,如果您通过一个索引对所有文档进行物理排序,那么您无法通过另一个索引对同一组文档进行物理排序。因此,每个表只有一个聚簇索引。

非聚集索引是一个单独的结构,非常类似于目录或书后面的索引。所以我想我只是专门回答了你的一些问题:

  1. 是的,索引会占用空间,但不会占用原始表。这就是您必须仔细选择索引的原因。由于必须维护索引,因此更新操作的性能也很小。

  2. 您的书中会提到所有理论类型的索引。位图索引在数据仓库应用程序或具有一些不同值的数据(如星期几等)中非常有用。因此它们通常不用于基本的RDBMS。我知道Oracle有一些实现,但我对此并不了解。

  3. 我认为索引的效率取决于字段的使用方式。预计表中的大部分数据扫描将在主键上完成,然后主键上的索引才有意义。您通常会将索引添加到where子句中出现的列或查询的连接条件。

  4. 在插入时,必须维护索引,因此系统需要做一些额外的工作来重新安排一些事情。