SQLServer查询计划

参考:
http://blog.csdn.net/luoyanqing119/article/details/17022649


1. 开启方式

    菜单栏:query---Display Estimated Execution Plan
    图标栏:Display Estimated Execution Plan


2. 执行计划的图表是从右向左看的
   开销--看百分比,
   数据量--看箭头粗细
   做了什么--鼠标悬停
   <-----------
        <-----------
        <-----------

3. 查找数据的几种方式 (尽量实现后面的两种)
    [Table Scan] 表扫描(最慢),对表记录逐行进行检查
    [Clustered Index Scan] 聚集索引扫描(较慢),按聚集索引对记录逐行进行检查
    [Index Scan] 索引扫描(普通),根据索引滤出部分数据在进行逐行检查
    [Index Seek] 索引查找(较快),根据索引定位记录所在位置再取出记录
    [Clustered Index Seek] 聚集索引查找(最快),直接根据聚集索引获取记录


4. 应对和分析慢查询的思路:
    先检查哪些操作的成本比较高,再看看那些操作在查找记录时用scan,则要考虑增加索引来解决。注意添加索引后,也会影响数据表的修改动作
    然后可以试试调整语句结构,引导SQL Server采用其它的查询方案去执行(比如使用临时表、CTE、更高效的查询等)
    离散度不太大的数据,比如0/1这样的数据,可以考虑使用分区


5. 常见的优化:
    为【scan】这类操作增加相应字段的索引
    有时重建索引或许也是有效的,具体情形请参考后文
    调整语句结构,引导SQL Server采用其它的查询方案去执行
    调整表结构(分表或者分区)
    提高硬件性能或者调整OS,内存,CPU,SQL Server的设置


6. 视图的优化:
    视图也是由一个查询语句定义,多数时候不是直接使用原表,会加上where语句
    优化视图时, 最好能根据实际需求,应用不同的过滤条件,再来决定如何去优化

 

SQL Server实现Join的方式:
1. Nested Loops Join 一张大表,一张小表
2. Merge join 两张表有排序,或者经扫描排序的索引而获得的数据
3. Hash Join 未排序的大型非索引输入

 

转载于:https://www.cnblogs.com/lynhou/p/6737695.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值