在 SQL Server 中的 guid 类型列上使用非聚集索引

本教程将介绍在 SQL Server 中的 guid 类型列上使用非聚集索引的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在 SQL Server 中的 guid 类型列上使用非聚集索引 教程 第1张

问题描述

我想优化我的团队用于应用程序的数据库的性能.

我一直在寻找可以添加外键的区域,然后对这些列进行索引以提高连接的性能.但是,我们的许多表都连接在 GUID 类型的 id 上,在插入项目时生成,并且在其他表中与该项目关联的数据通常具有列 item_id 包含 GUID.

我已经读过,将聚集索引添加到 GUID 类型的列是一个非常糟糕的决定,因为索引需要不断地重建才能有效.但是,我想知道,在上述场景中使用非聚集索引是否有任何损害?或者假设它会有助于提高性能是否合理?如果需要,我可以提供更多信息.

推荐答案

<anytype> 上的索引是迄今为止改进连接和单例查找的最佳选择.缺少此索引,查询将始终不得不端到端扫描整个表,而性能结果(通常)非常糟糕,并发性会被淘汰.

确实,出于您提到的原因,uniqueidentifier 对索引的选择不佳,但这绝不意味着您应该创建这些索引.如果可能,建议将数据类型更改为 INT 或 BIGINT.使用 NEWSEQUENTIALID()UuidCreateSequential 生成它们将有助于解决碎片问题.如果所有替代方案都失败了,您可能需要比其他索引更频繁地执行索引维护(重建、重组)操作.但是,这些缺点中的任何一个都绝不会超过首先拥有索引的好处!

好了关于在 SQL Server 中的 guid 类型列上使用非聚集索引的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。