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会预先将查询到的数据加载到内存中。