SQL优化

SET STATISTICS IO ON 
SET STATISTICS IO OFF 

显示:
表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。
表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

一、主键就是聚集索引

二、只要建立索引就能显著提高查询速度
三、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度

(四)索引使用总结

1、用聚合索引比用不是聚合索引的主键速度快
2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下
3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个
4 、日期列不会因为有分秒的输入而减慢查询速度

(五)其他注意事项

1. 不要索引常用的小型表
2. 不要把社会保障号码(SSN)或身份证号码(ID)选作键
3. 不要用用户的键
4. 不要索引 memo/notes 字段和不要索引大型文本字段(许多字符)
5. 使用系统生成的主键

六、改善SQL语句
 
1、Like语句是否属于SARG取决于所使用的通配符的类型
 
2、or 会引起全表扫描
 
3、非操作符、函数引起的不满足SARG形式的语句
 
4、IN 的作用相当与OR
 
5、尽量少用NOT 
 
6、exists 和 in 的执行效率是一样的
 
7、用函数charindex()和前面加通配符%的LIKE执行效率一样
 
8、union并不绝对比or的执行效率高,如果是两个字段作为条件时union比 or效率高得多,如果是同一个字段,则差不多。
 
9、字段提取要按照“需多少、提多少”的原则,避免“select *”
 
10、count(*)不比count(字段)慢
 
11、order by按聚集索引列排序效率最高
 
12、高效的TOP 

 13、用多少,提多少,尽量少用 select *
 14
、Count(*)不比Count(字段)慢,Count(*)与Count(主键)速度相当,而Count(*)比Count(非主键)要快,且字段越长,汇总      速度越快。

常用
SARG(扫描因子),属于SARG时,查询快,不属于时查询慢。

不满足SARG形式的语句最典型的情况就是包括非操作符的语句,
如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:
ABS(价格)<5000
Name like ‘%三’
 
1、Like语句是否属于SARG取决于所使用的通配符的类型
如:name like ‘张%’ ,这就属于SARG
而:name like ‘%张’ ,就不属于SARG。
原因是通配符%在字符串的开头使得索引无法使用。

2、IN 的作用相当与OR
语句:
Select * from table1 where tid in (2,3)

Select * from table1 where tid=2 or tid=3
是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。

 3.order by按聚集索引列排序效率最高

原文地址:https://www.cnblogs.com/flyerca/p/5320515.html