您的位置:首页 > 数据库

sql server 优化工作小结

2011-05-18 16:01 141 查看
建立的索引后, 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或哈希连接,会导致扫描第二个表时增加很多的行,效率更低,
并且还可能会影响第一个表排列好的结果记录的顺序,
因此应该根据最终的查询需求,将第一个表扫描的结果进行筛选,以尽可能小的结果集和其他表连接.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: