【问题标题】:What is cardinality and how does it affect performance (SQL Server)?什么是基数以及它如何影响性能(SQL Server)?
【发布时间】:2011-06-30 15:25:21
【问题描述】:

我们有一个大表,我需要在其中对单行进行更新。我不知道该行的主键,但我有一个在该表中唯一的 varchar 值。我还有该表中其他几列的值。

运行更新需要三分钟以上,我假设它会进行全表扫描。

查看表上的索引,列上的索引的基数为零,页数为零。还有其他索引的基数等于表中的行数(几百万)和几十万页数。

这些数字的实际含义是什么?

作为后续措施,添加限制以达到更高基数或页数的索引会加快执行速度吗?或者还有什么我可以查看的指标,以找到更适合快速找到我需要更改的行的指标。

【问题讨论】:

标签: sql sql-server indexing cardinality


【解决方案1】:

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

我怀疑 SQL Server 实际上并没有创建索引,因为它没有记录。这个字段有可能全是NULLs,或者上面有一个过滤器可以消除像WHERE 1=0这样的所有记录?

一个好的起点是运行更新并捕获实际的执行计划。

编辑:

索引类型 3 是 XML Index

Please see this page for reference.

XML 索引的结构有点不同。我自己不使用它们,但从一些快速阅读来看,它听起来像是创建了一系列用户无法直接访问但被查询引擎使用的附加索引。

【讨论】:

  • 该字段绝对不为空。它的索引类型为 3 ...我想知道它是否是非聚集索引,仅用于确保值是唯一的。
  • @Reverend - 你能看看索引定义吗?
  • 是的......但我正在通过 Squirrel 查看它,它只给了我一个数字。它说它的索引类型为 3。
  • @Reverend - 我现在正在查找。我怀疑它可能是一个XML 索引或一些奇怪的东西......该字段是什么数据?
  • 不可能是正确的......它只是一个字符串......就像一个uuid(不完全是,但有效)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2017-01-17
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多