• SQL SERVER 性能优化三: 索引对数据库的影响


    1、主键选取

    2、聚集索引必须建立在主键上吗?

    聚集索引是将索引列数据进行排序后放入B树;

    聚集索引可以不建立在主键上,主键的作用是唯一标识符,只是一般将聚集索引设置在主键上。

    3、聚集索引可以有重复值吗

    可以,但是会耗费更多内存,推荐聚集索引所在列使用唯一键。

    4、强制走索引

    查询不走索引时,可在查询语句后添加WITH (INDEX(QueryAA_Index)) ,强制执行索引。

    (1)下面给出查询语句实例和逻辑读取次数

    --数据表为BasicMsg20170331,且在AA字段上有非聚集索引
    SELECT * FROM BasicMsg20170331  WHERE  AA=7867695
    --Table 'BasicMsg20170331'. Scan count 1, logical reads 4881, physical reads 0, read-ahead reads 4888, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    SELECT * FROM BasicMsg20170331 WITH (INDEX(QueryAA_Index))  WHERE  AA=7867695 -- AND RecvTime<=89600000 

      --Table 'BasicMsg20170331'. Scan count 1, logical reads 1774, physical reads 10, read-ahead reads 20, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0

    从上结果可以看出,当添加了强制执行索引时,逻辑读变少了很多,但是物理读取增加了10次。

    PS:物理读是内容不在内存中,要去硬盘中读入内存,会 增加IO开销
    逻辑读内容在内存中,不需要读硬盘 ,无IO开销

    只此一生,与子白头
  • 相关阅读:
    git操作工作流
    http请求发生了两次(options请求)
    npm dose not support Node.js v10.15.3
    数据双向绑定页面无反应(angularjs)
    table样式的下拉框(angularjs)
    vue-router做路由拦截时陷入死循环
    js前台调用lodop打印
    vuejs2.0的生命周期解读
    Promise的一些相关讲解
    JAVA net 笔记
  • 原文地址:https://www.cnblogs.com/Miss-Bueno/p/7381931.html
Copyright © 2020-2023  润新知