什么是群集和非群集索引?如何使用sql server 2000企业管理器索引表?
答案 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)
聚簇索引:每个表只允许一个聚簇索引。如果索引是群集的,则意味着聚簇索引所基于的表将根据该索引进行物理排序。想想百科全书中的页码。
非聚集索引:每个表可以有许多非聚簇索引。想想本书后面的关键字索引。