(一)select
不要对字段进行null判断;
用函数charindex()和前面加通配符%的LIKE执行效率一样;
移除不必要的字段和表
union效率比or要高,除了or两边的查询列是一样的情况;
在所需要的最小数据集上操作,where条件设置好,不要区多余数据
字段提取要按照“需多少、提多少”的原则,避免“select ”
where或者order by/group by字段建立索引;
不要在where语句中使用非操作,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等;
like只能使用‘admin2%’形式,不能使用‘%dmin22’;
or会引起全表扫描;
in的作用相当于or;exists 和 in 的执行效率是一样的;
count()不比count(字段)慢
order by按聚集索引列排序效率最高
高效的TOP,sqlserver中的top是进过优化的,分页使用top
移除你JOIN和WHERE子句中的计算操作、函数
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段
如果在 where 子句中使用参数,也会导致全表扫描;select id from t where num=@num
(二)left join
左表的主键、外键都要做索引
网上资料说left join后面where 条件只要有一个有返回值,则转换成select * from t1,t2 where con1 and con2的形式,实测效率没有任何提升
(三)union
union和or执行结果一样,但是,当搜索条件中搜索字段不同时,union效率比or要高;当搜索条件中搜索字段一样时,效率一样差。union默认会去除重复记录,union all会显示全部记录
(四)update
where建立索引
(五)delete
where建立索引
(六)in
in的作用相当于or;exists 和 in 的执行效率是一样的;
(七)sum
sum函数注意溢出,可能需要使用sum(cast(id as bigint))转换成8字节的bigint
(八)group by
建立索引
(九)order by
建立索引