热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlserver优化工作小结

建立的索引后,select语句中,where条件和排序条件必须完全和索引一样,索引才能真正起到作用,并且排序条件的先后顺序必须和索引一致.where的字段必须处于索引最开始的位置,

建立的索引后, select 语句中,where条件和排序条件必须完全和索引一样,
索引才能真正起到作用,并且排序条件的先后顺序必须和索引一致.
where的 字段必须处于索引最开始的位置,例如:

表t 建立唯一索引,索引的字段依序为:abcd,并且都为降序

select a from t where a=1 and b = 1 order by c desc, d desc
以上语句能最佳使用到索引,下面语句使用索引,效果减弱:

select a from t where a=1 and b = 1 order by d desc, c desc
排序中c d字段前后交换后,索引还是用到了,但查询器会多进行一次排序.

select a from t where a=1 and b = 1 order by c , d desc
c字段排序改为正序,索引会用到,但会增加一次排序的工作,在索引中扫描的行数会增大一些

select a from t where a=1  order by c desc, d desc
条件中没有使用b字段,用不到索引,会扫描表

select a from t where b=1 and a = 1 order by c desc, d desc
条件中,ab字段顺序前后交换,对利用索引没有任何影响.

select a, E from t where a=1 and b = 1 order by c desc, d desc
结果字段中选择了E,E不是索引中的字段,查询器会扫描索引后,再次到表数据中去获取该字段的值

当两个表连接时,用nested-loop join连接2个表效率是最高的,当扫描的第一个表的行过多时,
可能查询优化器就不会用nested-loop join连接,会
自动采用Merge Join或哈希连接,会导致扫描第二个表时增加很多的行,效率更低,
并且还可能会影响第一个表排列好的结果记录的顺序,
因此应该根据最终的查询需求,将第一个表扫描的结果进行筛选,以尽可能小的结果集和其他表连接.

转:https://www.cnblogs.com/qqq88zz/archive/2011/05/18/2050193.html



推荐阅读
author-avatar
原野上的蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有