• 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 未排序的大型非索引输入

  • 相关阅读:
    css解决display:inline-block;产生的缝隙(间隙)
    js二进制与十进制互转
    js获取HTTP的请求头信息
    安装WampServer时出现的问题(丢失VCRUNTIME140.dll或MSVCR110.dll)以及解决办法
    学习安装并配置前端自动化工具Gulp
    解决overflow:hidden在安卓微信页面没有效果的办法
    Python 调用 ES、Solr、Phoenix
    Python 调用 Hprose接口、Dubbo接口、Java方法
    Python调用Redis
    robot用例执行常用命令(转)
  • 原文地址:https://www.cnblogs.com/lynhou/p/6737695.html
Copyright © 2020-2023  润新知