9、SQL Server 查询调优与基数估计

SQL Server 查询调优与基数估计

1. 无序非聚集索引扫描 + 查找

当满足以下条件时,优化器通常会使用无序非聚集索引扫描 + 查找的访问方法:
- 查询具有选择性的筛选器。
- 存在包含筛选列的非聚集索引,但该索引不是覆盖索引。
- 筛选列不是索引键列表中的前导列。

例如,对于以下查询,它将对在键列 (shipperid, orderdate, custid) 上创建的索引 idx_nc_sid_od_cid 使用这种访问方法:

SELECT orderid, custid, empid, shipperid, orderdate, filler
FROM dbo.Orders
WHERE custid = 'C0000000001';

此索引的关键在于,custid 列出现在索引叶行中,但不是第一个键列。

该访问方法首先对索引的叶级别进行完全无序扫描,然后查找符合条件的键。查询必须具有足够的选择性,否则大量的查找操作会使该方法比全表扫描更昂贵。为了确定筛选器的基数,SQL Server 需要筛选列上的直方图。通常,创建索引时,SQL Server 会在索引的前导键列上创建包含直方图的统计信息。但在这个例子中,优化器需要 custid 列上的直方图,而它并非索引的前导键列。如果此类统计信息不存在,且数据库属性 AUTO_CREATE_STATISTICS 已开启(默认开启),SQL Server 会自动创建。

第一次运行此查询时,SQL Server 会查找 custid 列的分布统计信息,若不存在则检查 A

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值