在SQL Server中建立索引

时间:2010-10-27 08:06:40

标签: sql-server

有人可以解释索引在SQL Server中是如何工作的以及什么是聚簇索引和非聚簇索引?

当我们在某些列上创建索引时,它如何提高性能以及如何存储列的值以提高性能?

4 个答案:

答案 0 :(得分:2)

你可以写一本关于它的书。

你应该熟悉这个

Table and Index structures

Understanding and design indexes

然后,如果你仍然没有抓到一些东西,请在这里询问一些细节。

答案 1 :(得分:1)

退房:

一些好的介绍材料

答案 2 :(得分:1)

简而言之:

索引更快,因为它是缓存在内存中的表的子集。

此外,如果所有数据都在索引中,则服务器甚至不必查询磁盘。

Clustered vs. unclustered:

一个表只能有一个聚簇索引,因为这意味着磁盘上的数据按照与索引相同的顺序排序。如果您插入新数据,将调整表格以保持此顺序。

群集索引通常更快搜索,特别是如果您需要来自每一行的更多数据但是在插入时遇到性能损失。

通常,您在ID列上有聚集索引。

非聚集索引,你可以拥有很多,它们用于加速查询。

通过将最常查询的字段组合在一起并对索引中的字段进行排序,以便最多变化的字段首先可以获得较大的性能提升,但是读取其他提供的链接,您可以随时了解有关索引的更多信息,即使你建立自己的数据库=)

答案 3 :(得分:1)

让我试着解释索引的概念。这个解释不是特定于SQL Server的,我可能过度简化了一些事情。但是,它可以帮助您了解索引有用的原因。

假设您存储由ID和名称组成的简单记录。数据存储在行中,其中第一列(#)是记录号或地址,使我们能够指向特定行。

#  Id  Name
------------
0  1   Lorem
1  2   Ipsum
2  3   Dolor
3  5   Sit
4  6   Amet

假设您要查找具有特定名称的行,请说“坐”。您可以找到它的唯一方法是扫描整个表格以查找该特定名称。在大桌子上这样做很费时间。

要解决该问题,您可以在“名称”列上创建索引。索引就像一个表:

Name   #
--------
Amet   4
Dolor  2
Ipsum  1
Lorem  0
Sit    3

请注意,对名称进行排序,以便更轻松地搜索特定名称。查找名称不再需要完整的表扫描,而是可以通过搜索索引来加速。找到名称后,可以查找相应的记录号,并可以检索相关的记录。通常,索引将使用平衡树,这使得搜索非常有效。

总而言之,如果您有索引,搜索速度会更快,但您必须维护一个消耗空格的额外数据结构,并且需要在修改基础表时进行更新。

聚簇索引是一种特殊索引,用于定义表的存储方式。在Id列上具有聚簇索引将确保表中的行按ID排序。您不需要额外的索引数据结构来维护此索引。索引已经根据表的存储方式定义。