博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL语句优化

Posted on 2013-04-02 00:14  Tu.dou  阅读(169)  评论(0)    收藏  举报

SQL语句优化的操作:

1.模糊匹配尽量少用 like'%param%' 前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%.

2.可对字段相应的加索引,适当的索引会加快执行效率,索引也会占用内存
    避免对索引字段进行计算操作.
    避免在索引字段上使用not,<>,!=.
    避免在索引列上使用IS NULL和IS NOT NULL.
    避免在索引列上出现数据类型转换.
    避免在索引字段上使用函数.
    避免建立索引的列中使用空值.

3.能用UNION ALL 代替UNION 的话尽量代替(UNION 会自动去除重复行,并且会自动排序,而UINON ALL只是简的将结果集组合在一起).

4.对于 WHERE 子句的法则
    尽量避免在 WHERE 子句后面使用 IN, NOT IN, OR, HAVING.

5.慎重使用临时表.

6.嵌套子查询尽量少用,一般不要超过三层,过多的嵌套子查询人都会看晕,何况电脑呢.

7.只在必要的情况下才使用begin tran
    SQL Server中一句SQL语句默认就是一个事务,在该语句执行完成后也是默认commit的。其实,这就是begin tran的一个最小化的形式,好比在每句语句开头隐含了一个begin tran,结束时隐含了一个commit。
    有些情况下,我们需要显式声明begin tran,比如做“插、删、改”操作需要同时修改几个表,要求要么几个表都修改成功,要么都不成功。begin tran 可以起到这样的作用,它可以把若干SQL语句套在一起执行,最后再一起commit。好处是保证了数据的一致性,但任何事情都不是完美无缺的。Begin tran付出的代价是在提交之前,所有SQL语句锁住的资源都不能释放,直到commit掉。
    可见,如果Begin tran套住的SQL语句太多,那数据库的性能就糟糕了。在该大事务提交之前,必然会阻塞别的语句,造成block很多。
    Begin tran使用的原则是,在保证数据一致性的前提下,begin tran 套住的SQL语句越少越好!有些情况下可以采用触发器同步数据,不一定要用begin tran.