群集索引如何存储在硬盘上?什么是逻辑顺序?
非聚集索引如何工作?
答案 0 :(得分:21)
这意味着表中的数据根据B-Tree
(或聚类列)的顺序存储在CLUSTERED PRIMARY KEY
中。
这个名字在我看来有点令人困惑。 Oracle
中的相同概念称为index-organized table
,我发现它更具描述性。
非聚集索引包含索引列的值以及指向它们源自的记录的指针。
“聚集索引”是表本身; “非聚集”索引是某些表列的有序副本。
如果“创建”聚簇索引,则会重新排列表。这就是为什么你不能在一张桌子上拥有多个“聚集索引”的原因:这个表不能以多个顺序排列。
如果创建辅助索引,则会创建表的卷影副本,其中包含索引列的值和指向它们的记录的指针。每当表格改变时,副本也会改变(引擎会自动处理)。
id col1 value
-- -- --
1 1 Data 1
6 1 Data 6
3 1 Data 3
7 2 Data 7
9 2 Data 9
5 2 Data 5
该表未订购。
id col1 value
-- -- --
1 1 Data 1
3 1 Data 3
5 2 Data 5
6 1 Data 6
7 2 Data 7
9 2 Data 9
该表在id
上订购。
Table Index
id col1 value col1 id
-- -- -- -- --
1 1 Data 1 1 1
3 1 Data 3 1 3
5 2 Data 5 1 6
6 1 Data 6 2 5
7 2 Data 7 2 7
9 2 Data 9 2 9
该表是id
上的订货人,索引是在(col1, id)
订购的
答案 1 :(得分:4)
对于非聚簇索引,会创建一个单独的文件,该文件仅包含索引字段,该字段将其记录放在逻辑索引顺序中。对于聚簇索引,没有单独的文件 - 表本身(所有字段)中的数据按索引的逻辑顺序放置。
这使得对索引的查找更快(尽管它确实是最好的索引,比如你将查找范围的日期)。如果将记录插入中间,它也会使插入速度变慢。
答案 2 :(得分:3)
聚集索引存储
聚簇索引从根本上与所有其他索引的工作方式完全相同 - 它们存储在称为B-Tree的结构的变体中。它们存储在相同的文件中,格式与SQL Server中的所有其他表格相同。
概念
退一步思考您正在编制索引的数据。 (我希望你能想到这本书中的一本书)。如果除了在本书末尾有索引之外,您还订购了书中的数据,该怎么办?您可以更快地查找信息。以电话簿为例,其中所有数据均按姓氏和名字排序。您无需到电话簿的背面查找某人的电话号码。与历史书相比,你必须到书后面的索引找到你想要的东西。
逻辑上,聚集索引(或Oracle中的“索引组织表”) 您的数据,但已排序。物理上,B树的叶节点按排序顺序包含所有表的数据。当您在连续范围(例如日期范围)上扫描表格中的数据时,这非常有用。
关于聚簇索引的另一个重要事项(至少在SQL Server中)是您的聚类列(即构成聚簇索引排序方式的列)包含在您在其上定义的每个非聚簇索引的末尾。表。这样可以非常快速地搜索 您的群集列,这在OLAP数据库中通常是非常需要的。
非聚集索引
您的表格只能存储在一个物理订单中。但有时您需要以其他方式查找数据。对于这些方案,您使用非聚集索引。这也是作为B树实现的,但它与表的数据顺序没有任何关系,就像聚簇索引一样。这意味着如果您希望表中的数据未包含在非聚集索引中,则SQL Server必须在物理上查找表中的数据才能获得所需内容。这是另一项操作,对于许多查询来说可能成本很高,并且在优化表时是一个关键的设计考虑因素。
一句话
你可以写一本关于这些东西的书。很多人都有。如果我已经厌倦了你,请查看维基百科的B-Tree页面。从那里开始。如果您仍然(真的)感兴趣,我建议实际编程一个简单的B树,以便您可以看到所涉及的内容。而且,如果您想更深入地了解完全 SQL Server如何存储所有这些内容,请查看Kalen Delaney的Inside SQL Server: The Storage Engine。所有这些都是过度杀戮吗?那是给你决定的。但是你学习的越多,你对DB开发的熟悉程度就越高,你的系统就会越快。我保证。
答案 3 :(得分:2)
这意味着聚簇索引确定了实际存储表中记录的物理顺序。非聚集索引只是单独存储的键值列表,可以按照除聚类/物理排序之外的其他顺序进行快速查找。
快速示例:包含ID
(主键)的表格,FirstName
,LastName
和Car
包含三个人:0 = Stig(Llana),1 = Jeremy Clarkson(DB9),2 = Richard Hammond(911),3 = James May(Lambo)和LastName
上的聚簇索引以及Car
上的非聚集索引将存储实际的数据行在磁盘上的物理顺序表中:
ID FirstName LastName Car
1 Jeremy Clarkson DB9
2 Richard Hammond 911
3 James May Lambo
0 The Stig Llana
非聚集索引也会存储如下内容:
Car ID
911 2
DB9 1
Lambo 3
Llana 0
答案 4 :(得分:0)
表示该表按聚簇索引的指定顺序排序。非聚集索引是物理存储的。
答案 5 :(得分:-3)
主索引在技术上不是“聚簇”索引,但两者都会导致对数据进行物理排序。他们的名字显而易见。主索引处理主键。意思是,每个主键必须是唯一的(否则它不是主键)。聚类索引处理任何非主键的内容,并且根据定义,可以允许它是非唯一的。这就是“集群”这个词的来源。如果您对非主要数据进行排序,则表示它可以重复。当重复数据一起出现时,它被视为“群集”。