sqlserver 索引相关的优化点记录

很久没搞sqlserver了,接了一个项目是sqlserver要提高查询效率,首选索引添加以及优化,中间遇到些问题,记录如下

首先使用sqlserver managent studio进行sql的效率分析以及执行计划的查看,如果性能严重,会提示如何创建索引

一、聚集索引和非聚集索引问题

      项目中很多都是需要时间段查询类似于   create_time >=  ?  and  create_time <= ? 等,所以毫不犹豫在在create_time上增加索引,create index  idx_XXX_xxx on  table xxxxx,

     查看了很多SQL语句,原先很多都是用 CONVERT函数做了个转换,果断全部去掉,但是发现虽然查询有提升但是并不多呢,所以查资料发现这种时间段的查询适合聚集索引,于是增加聚集索引但是系统提示Pk_xxxx聚集索引已经存在,于是先删除主键,再给create_time增加聚集索引,然后再加上主键,果然提升很多

关于聚集索引和非聚集索使用场景,可参考https://blog.csdn.net/weixin_39857153/article/details/111382169 中的表格

二、key lookup 问题

    键查找是因为查询返回的结果列中有非索引的列,这种有两种方式解决:

   1、增加覆盖索引,覆盖所有列

   2、使用include索引,包含所有列

    因为我这边的列不多所以我直接include了,

    这边有个不确定的问题:

    如果结果列很多,使用覆盖索引或include是否会影响增、删改的性能呢?

 

三、index scan 问题

   索引扫描分为聚集和非聚集两种,索引扫描比表扫描性能搞,但是不如索引查找,

   所以遇到索引扫描问题需要想办法修改成索引查找

  索引查找的定义:条件中包含WHERE或者ON的话,查询条件必须是位于索引集合列中首位,此时索引查找将会被使用。

  关于这块可参考: https://www.cnblogs.com/CreateMyself/p/6117352.html

四、多个left join问题

    项目中有几个地方是分页展示,展示的数据需要left join几个百万级的数据表

    这种情况下,因为是分页展示,那么考虑去掉left join 查询出来的分页数据后直接循环

 查询几张表,在查询条件上加上索引,这样会比较快点

 

未完待续.....................

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值