Ste*_*ray 4 sql-server indexing guid clustered-index
我刚刚接管了大约2200张表的数据库。其中有2000多个没有聚集索引(有些根本没有索引)。
所有表都已配置为使用GUID作为唯一标识符。
仅查看查询计划,就可以看到发生了许多表扫描。大多数搜索使用uniqueidentifier进行搜索。
我想知道在GUID上具有聚集索引比根本不具有聚集索引是否更好。我想象在16字节列上的聚集索引将不可避免地导致碎片化。
我可以说可以聚集在其他列上,但是大多数搜索都倾向于通过GUIDS进行搜索或通过GUIDS进行联接。
任何建议都将受到欢迎。我从未见过那么多GUID !!
通常,我建议将一identity列用作主键,并将其用于集群。这也是joins 的更好选择。
为什么?首先,身份密钥通常比唯一ID短。因此,外键引用和索引较小。
更重要的是,inserts始终位于表的“末端”。使用GUID时,插入常常会导致碎片。如果要插入行,我会说GUID上的二级索引可能比聚集索引更好(碎片仅存在于索引中)。
对于2000个表,我怀疑您会更改结构。您可以使用来改善碎片newsequentialid()。
带有随机值的 GUID列通常不是聚集索引的最佳选择,因为它可能是索引碎片的根本原因:
您可以通过3种方式来实现: