sql 优化注意事项

来源:互联网 发布:淘宝老店铺 编辑:程序博客网 时间:2024/05/21 18:36
1.存储过程比sql语句效率高;存储过程经过预编译处理 而SQL查询没有


2.给表建立索引的字段(常见字段是where 后的条件字段)


3.查询表时使用(nolock)查询语句不会阻塞 


4.不要使用 select * from dbo.table ,用具体的字段列表代替“*”,不要返回用不到的任何字段。同时避免使用count(*);


5.From最后面的表为基础表,一般要选择记录数最少的表作为基础表。


6.使用Truncate替代delete来删除记录,但Truncate数据不记录日志,无法进行回滚


7.观察数据的分布,然后把能最快降低数据集的where字段放到前面;假设STATUS=1能一下子把数据从1000万降到1万,那在where中,第一个出现的条件应该是STATUS=1


8.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;
如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。


9.使用确定的Schema
在使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以直接找到对应目标,避免去计划缓存中搜索。
而且搜索会导致编译锁定,最终影响性能。比如select * from dbo.TestTable比select * from TestTable要好


10.用EXISTS替代IN、用NOT EXISTS替代NOT IN:
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。
在子查询中,NOT IN子句将执行一个内部的排序和合并。
无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。


11.插入数据到临时表,尽量避免order by