集群索引现在必须-为什么?


9

早些时候,关于是否(始终)参与/避免聚集索引的辩论/讨论对我来说不是结论性的。

好吧,我知道有时要结合适当的特定目的和上下文来使用它们。

SQL Azure数据库群集索引要求

“ SQL Azure不支持没有聚簇索引的表。表必须具有聚簇索引。如果创建的表没有聚簇约束,则必须先创建聚簇索引,然后才能对表进行插入操作”

不符合先前的结论,理由和解释。

在先前的解释中,我遗漏了没有任何例外地严格施加聚集索引的基本原理是什么?


4
如您所知,SQL Azure与SQL Server不同。Azure是一个分布式数据库,可跨多个物理计算机存储您的数据。这就是为什么。

1
请注意,在Azure SQL数据库服务的v12版本中,您的表可能没有聚簇索引。
Troy Hunt

Answers:


11

阅读Inside SQL Azure

SQL Azure提供了用于应用程序数据存储的逻辑数据库。实际上,每个订户的数据实际上被存储了多次,并在三个SQL Server数据库中复制,这些SQL Server数据库分布在单个数据中心的三个物理服务器上。许多订户可以共享同一物理数据库。

需要群集密钥,以便您的数据的三个副本可以保持同步。W / oa键,无法知道更新了哪些行。堆(带有群集索引的表)仅具有物理“键”(fileid:pageid:slot),并且由于逻辑数据库的3个副本与其他逻辑数据库共享物理数据库,因此一台服务器上的物理地址对另一台服务器没有任何意义。副本,因此不可能复制堆。


(逻辑)键不必驻留在聚集索引中。它可能是非集群的。也许需要(大概唯一的)聚集索引的真正原因可能是堆使用了RID,而唯一的聚集索引却没有。这是你的意思吗?
nvogel 2010年

3
从链接的文档中:“ SQL Azure中的基础高可用性和复制技术基于复制B树行。” 因此,即使堆具有NC密钥,您也只能复制NC,而不能复制堆本身。
Remus Rusanu


1

Azure是远程服务器上的基于云的分布式系统。数据可能会存储在多个驱动器/服务器上,并且在堆上执行此操作效率极低(因为系统需要知道要检查的机器,并且没有聚集索引,这是资源密集型操作) 。

聚集索引为表中的所有行和所有其他索引提供了查找,因此,如果没有一个索引,则每一项操作都无法在多台计算机上进行表扫描。


2
可能是事实,但目前不是。阅读我链接的文章,它解释了请求路由的工作方式,以及为什么查询始终在单个框上运行而从不跨多个服务器运行。就是 没有分片。
Remus Rusanu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.