zoukankan      html  css  js  c++  java
  • T-SQL备忘(5):查看执行计划

    先理解几个概念:表扫描、聚集索引扫描、聚集索引查找、索引扫描、书签查找。

    查看执行计划

    在理解概念之前先得知道如何查看执行计划—Ctrl+L。如下图:

    注:SQL Server的执行计划是从右向左看的。

    【理解几个概念

    1.表扫描(Table scan):发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次。

     select * from T_UserInfo
    

    查看执行计划如下:

    2.聚集索引扫描(Clustered Index Scan):发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好

            创建聚集索引:

     CREATE CLUSTERED INDEX INDEX_Userid  ON T_UserInfo (Userid)
    

      

    因为给表加了聚集索引所以即使是查找全部数据,它也会使用聚集索引查找。

    3.聚集索引查找(Clustered Index Seek):扫描聚集索引中特定范围的行。

     select * from T_UserInfo where Userid='ABCDE12EF'
    

    注:前提是where后面的查找条件有聚集索引列。也就是当且仅当where后面的条件包含聚集索引的时候。

    4.索引扫描(Index scan):整体扫描非聚集索引。

    创建非聚集索引:

    CREATE NONCLUSTERED INDEX IX_Name ON T_UserInfo(UserName)
    
     select UserName from T_UserInfo ---只要不是全部的列 *
    

    注:当在非聚集索引中并非覆盖和包含所需全部的列时,SQL Server会利用聚集索引找到数据。

    5.书签查找(Bookmark Lookup

    我们知道如果表没有聚集索引的话 select * from T_UserInfo 会使用表扫描,有的话则会使用聚集索引扫描。但是如果有聚集索引机会使用聚集索引扫描。

     select * from T_UserInfo with(index (IX_Name)) where UserName='李100'
    

    这里借用一句:上面的过程可以理解为:首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找。

      【查询性能分析】

    这里主要是掌握几个系统命令:

    dbcc dropcleanbuffers      --注释:清除数据
    dbcc  freeproccache        --注释:清除缓存
    Set statistics io on       --注释:开启系统资源使用统计
    Set statistics time on     --注释:开启执行时间统计
    

      

  • 相关阅读:
    分享——张南《从Desktop到Mobile的自动化测试实践》
    GTAC 2015将于11月10号和11号召开
    2015 Selenium大会
    最近订阅的视频
    Episode 388: Testing vs Monitoring
    中国移动测试大会 PPT 和视频
    首届中国移动互联网测试大会在北京圆满闭幕
    推荐——吴晓波频道
    移动测试会Ebay沙龙PPT
    「中国移动互联网测试大会」报名开始啦!
  • 原文地址:https://www.cnblogs.com/fengchengjushi/p/4448821.html
Copyright © 2011-2022 走看看