执行计划中的TableCardinality是什么意思?我正在研究数据库调优性能。
谢谢
发布于 2011-03-22 03:48:21
基数是给定表/列的唯一值的数量(因此,与主键索引中的条目数量相等并不奇怪,因为该索引最有可能是聚集的)。索引或表的基数对于sql服务器很有用,因为它允许查询优化器对引用该表时使用的可能的最佳计划进行明智的猜测。
当优化器必须获取您的sql代码并计算出如何处理它时,它将在确定将用于实际检索数据的计划之前考虑替代计划。在大多数现实世界中,可能计划的数量太大,sqlserver无法通过对所有可能计划进行抽样来计算绝对最佳计划,因此优化器将使用统计分析来确定“足够好”的计划。
基数是它用来制定这样一个计划的指标之一,因为它可以用它来挖掘要使用的物理连接(例如,hashmap或循环)
发布于 2010-08-26 01:37:17
From this article
SQL Server会在编译查询计划时跟踪表的基数。它之所以这样做,是因为如果实际基数与编译时基数有很大不同,它将触发自动重新编译。
这似乎是一个合理的猜测,即这就是plan XML中的TableCardinality (并显示在属性窗口中),但我还没有找到任何东西来证实这一点。
发布于 2011-03-22 03:36:18
在执行计划的上下文中,表的基数通常与该表的最新统计数据中的行数相同。
来源:查看http://support.microsoft.com/kb/195565并搜索"table cardinality“-您将看到这样的注释:”注意:在这个最严格的意义上,SQL Server将基数计算为表中的行数。“
此外,我在不同的查询中检查了许多表,在每种情况下,TableCardinality都等于表中的行数,或者在某些情况下,等于该表的主键的sys.sysindexes中的rowcnt值。
https://stackoverflow.com/questions/3567152
复制相似问题