什么是基数(Cardinality),它如何影响SQL Server的性能?

9
我们有一张巨大的表格,我需要对其中的一行进行更新。我不知道该行的主键,但是我有一个在该表中唯一的varchar值。我还有该表中其他几列的值。
运行更新操作需要三分钟以上的时间,我认为它正在进行全表扫描。
查看表上的索引,该列上的索引基数为零,页数也为零。还有其他索引,其基数等于表中的行数(几百万),页数为几十万。
这些数字实际上意味着什么?
作为后续步骤,添加一个命中基数更高或页数更多的索引的限制,能否加快执行速度?还是我可以查看索引上的其他内容,找到更适合快速找到我需要更改的行的索引?

这个回答解决了你的问题吗?什么是数据库中的基数? - Wai Ha Lee
1个回答

8

基数是表中该字段的唯一值数量。

我怀疑SQL Server实际上没有创建索引,因为它没有记录。这个字段全部为NULL或者有一个过滤器将所有记录消除了,比如WHERE 1=0吗?

开始的好地方是运行更新并捕获实际执行计划。

编辑:

索引类型3是一个XML索引

请参考此页面。

XML索引的结构有很大的不同。我自己不使用它们,但从一些快速阅读中可以发现,它创建了一系列额外的索引,用户无法直接访问,但由查询引擎使用。


1
该字段绝对不为空。它具有索引类型3...我想知道它是否为非聚集索引,仅用于确保值是唯一的。 - Reverend Gonzo
@ Reverend - 您能看一下索引定义吗? - JNK
是的... 但我是通过 Squirrel 查看它,只给了我一个数字。它说它的索引类型为3。 - Reverend Gonzo
那不可能吧...它只是一个字符串...就像UUID(不完全一样,但实际上类似) - Reverend Gonzo
这绝对是一个 XML 索引。 - JNK
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接