关闭

性能调优第三篇-执行计划常见操作符

560人阅读 评论(0) 收藏 举报
分类:

前言


前面的文章知道了如何格式化,和如何查看执行计划。这篇文章主要介绍常见的操作符


操作符

SQL Server执行计划就是一组操作符构成的。每个操作符实现一个基本操作,例如从表中扫描数据、在表中更新数据、过滤或聚合数据,或者连接两个数据集。操作符有几十种。迭代器可以没有子节点,也可以有有一个,两个,或更多的子节点;最后组合成执行计划的树。通过构建适当的查询计划,SQL Server可以执行任何SQL语句。如下图中:

每一个框里的就是一个操作符



执行计划的选择

某些语句经常有许多有效的查询计划。查询优化器是在一定时间内选择相对最优的查询计划。对于某些特别复杂的SQL语句,他的查询计划可能有非常多。优化器也很难在短时间内产生真正最好的执行计划.所以我们会发现有很多复杂语句的执行计划选择不正确,导致查询非常缓慢。所以我们写SQL 语句时:尽量不要写得过于复杂,可以用临时表,对复杂的语句进行分拆


聚集索引扫描

如下图语句,表上有聚集索引,且 没有任何筛选条件来使用索引查找。只能对表进行扫描,来获取需要的数据,就会使用这种操作符.需要注意的是:聚集索引扫描基本上等价于表扫描。(因为聚集索引可以认为就是数据本身)。会对整个表的数据进行扫描一次。具体的区别在后续讲索引的地方详细介绍。


表扫描

和聚集索引扫描类似,唯一的区别是此时表上没有聚集索引的时候,操作符就会显示表扫描


索引扫描

索引扫描其实就是非聚集索引扫描。通常,索引扫描的效率比聚集索引扫描更好。因为非聚集索引不会包含表中索引的数据。这会使得扫描的页数会少很多。



索引查找

不管是聚集索引查找还是索引查找.都是通过索引直接能找到查找到数据。通常来讲索引查找比索引扫描效率更高。所以,当我们发现一个看到一个SQL 后面有跟具体的筛选条件例如:WHERE ID=1  而此时对表上使用的是表扫描或者聚集索引扫描,那么就要考虑索引建立是否合理了。

但,这不是绝对的。这某些场景中,扫描比查找更快。




总结

总的来说,以上操作符的优先级如下:索引查找  > 索引扫描>表扫描=聚集索引扫描 。这几个主要是跟索引相关的操作符。后续还会在补充。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30099次
    • 积分:848
    • 等级:
    • 排名:千里之外
    • 原创:47篇
    • 转载:4篇
    • 译文:1篇
    • 评论:15条
    博客专栏
    最新评论