在Sql Server中建立索引

时间:2009-04-01 18:55:09

标签: sql-server indexing sql-server-2000

什么是群集和非群集索引?如何使用sql server 2000企业管理器索引表?

4 个答案:

答案 0 :(得分:3)

clustered上的ID索引中,表格行ID排序。

non-clustered上的ID索引中,对表格行的引用ID排序。

我们可以将数据库与CSV文件进行比较:

ID,Value
-------
1,ReallyReallyLongValue1
3,ReallyReallyLongValue2

clustered表格中,当我们插入新行时,我们需要在现有行之间进行挤压:

ID,Value
-------
1,ReallyReallyLongValue1
2,ReallyReallyLongValue2
3,ReallyReallyLongValue3

,插入速度慢但检索速度快。

non-clustered表中,我们保留了一个单独的文件索引文件,用于命令我们的行:

Id,RowNumber
------------
1, 1
3, 2

当我们插入新行时,我们只需附加到我们的主文件中并更新短索引文件:

ID,Value
-------
1,ReallyReallyLongValue1
3,ReallyReallyLongValue3
2,ReallyReallyLongValue2

Id,RowNumber
------------
1, 1
2, 3
3, 2

,插入速度快但检索效率低。

在真实数据库索引中使用更有效的二叉树,但原理保持不变。

群集索引在SELECT上更快,非群集索引在INSERT / UPDATE / DELETE上更快

答案 1 :(得分:2)

聚簇索引意味着行按该索引中的值进行物理排序。非聚集索引意味着索引表保持最新,允许基于值快速搜索和排序,但不对行进行物理排序。

表中只能存在一个聚簇索引,如果存在主键,则表示聚簇索引(在SQL Server中)。

答案 2 :(得分:2)

聚簇索引定义实际表的存储方式。存储行的方式是快速搜索聚簇索引中的字段。 (它们不是以索引字段的排序顺序存储,而是以binary tree或类似的方式存储。)

每个表只能有一个聚簇索引。聚簇索引包含表中的所有字段,例如:

   indexfield1 - indexfield2 - field2 - field3 - ....

非聚集索引就像一个单独的表。它包含索引中的字段以及对表中字段的引用。例如:

  secondindexfield1 - secondindexfield2 - reference to table row

在搜索非聚集索引时,SQL Server将在索引中找到该值,对该表执行“书签查找”,并从那里检索其他行字段。这就是非聚集索引的性能略低于聚簇索引的原因。

要在SQL Server Management Studio中添加索引,请在对象视图中展开表节点。右键单击“索引”并选择“新索引”。

答案 3 :(得分:0)

  • 聚簇索引:每个表只允许一个聚簇索引。如果索引是群集的,则意味着聚簇索引所基于的表将根据该索引进行物理排序。想想百科全书中的页码。

  • 非聚集索引:每个表可以有许多非聚簇索引。想想本书后面的关键字索引。