SQL Server查询调优:基数估计与统计信息深度解析
1. 基数估计器的选择与使用
在SQL Server中,若要使用非默认的基数估计器,可以借助查询跟踪标志来强制指定。具体操作如下:
- 对于旧版基数估计器,使用跟踪标志9481。
- 对于新版基数估计器,使用跟踪标志2312。
示例代码如下:
USE PerformanceV3;
ALTER DATABASE PerformanceV3 SET COMPATIBILITY_LEVEL = 120;
若数据库需要使用兼容性级别120及以上以启用新功能,但仍希望默认使用旧版基数估计器,可通过以下两种方式在服务器级别启用跟踪标志:
- 启动参数: –T9481
- 命令: DBCC TRACEON(9481, –1)
2. 低估和高估基数的影响
准确的基数估计并非易事,即使使用新版基数估计器,也可能出现估计不准确的情况。不准确的估计可能导致优化器做出次优选择。
- 低估基数的影响 :
- 对于过滤器,倾向于使用索引查找和查找操作,而非扫描。
- 对于聚合、连接和去重操作,倾向于使用基于排序的算法,而非基于哈希的算法。
- 对于排序和哈希操作,由于内存授予不足,可能会溢出到tempdb。
- 倾向于选择串行计划,而非并行计划。
示例代码展示低估情况:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



