SQL 性能调优

1、SELECT查询中尽量避免使用 ‘ * ‘

如果使用’*’ ,数据库会查询数据字典,依次解析各列名,最好明确指定各列的名称,

如select name,age from student where 1=1。

2、使用DECODE函数来减少处理时间 

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

3、用>=替代>

比如最好这样写: select name,age from student where age>=20。

两者的区别在于, ‘>=’将直接跳到第一个age等于20的记录,

而‘>’将首先定位到age=20的记录并且向前扫描到第一个age大于20的记录。

4、用TRUNCATE替代DELETE 

运用TRUNCATE时, 回滚段不会存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短,

TRUNCATE只在删除全表或分区适用。

5、用EXISTS替代IN

用IN将启用全表扫描,使用EXISTS将利用索引,提高查询效率。

6、用NOT EXISTS替代NOT IN

用NOT IN将启用全表扫描,使用NOT EXISTS将利用索引,提高查询效率。

7、  用UNION-ALL 替换UNION

UNION:合并并且排序;

UNION-ALL:只合并不排序。

8、用UNION替换OR (适用于索引列)

通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果,对索引列使用OR将造成全表扫描。

但是,这只针对多个索引列有效,如果不是在索引列,查询效率可能会因为你没有选择OR而降低。

9、  用WHERE替代ORDER BY

10、用WHERE子句替换HAVING子句

避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作.。

如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

11、GROUP BY的使用

可以通过将不需要的记录在GROUP BY 之前过滤掉来提高GROUP BY 语句的效率。

12、减少访问数据库的次数

频繁的访问数据库是非常耗性能的,因此如果可以,尽量将所需数据一次性查询出来再做处理。

代码中尤其要避免在循环体中去查询数据库。

13、常使用COMMIT

只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少。

14、避免使用模糊查询

尽量避免在一个复杂查询里面使用LIKE‘%%’模糊查询,这会导致相关列的索引无效,所以我们要尽可能的确定查询条件。

15、索引字段的注意事项

避免对索引字段进行计算操作,避免在索引字段上使用'not','<>'或者'!=',避免在索引列上进行数据类型转换,

避免在索引字段上使用函数,避免在索引列中使用null。

16、其他系统性能相关

有时候在编写Service函数的时候,返回值尽量以IQueryable<T>的形式返回,而不是IEnumerable<T>,

因为IEnumerable会预先将查询到的数据加载到内存中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值