zoukankan      html  css  js  c++  java
  • 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 未排序的大型非索引输入

  • 相关阅读:
    C++如何对接sqlitepp
    c++11中的condition_variable和之前的pthread_cond_timedwait的不同之处
    浏览器设置代理模式后的报文是怎么样的?
    C++11中令人吐血的"移动语义"和"新的右值引用"
    MYSQL的事务及锁操作
    Microsoft Word —— 使用宏脚本将所有表格添加边框
    Navicat——如何导出数据字典
    Redis——配置详解
    keepalived——tengine集群主备均有VIP
    Docker——如何修改运行中容器的映射端口
  • 原文地址:https://www.cnblogs.com/lynhou/p/6737695.html
Copyright © 2011-2022 走看看