`
yaya_wiscom
  • 浏览: 49945 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

简单而有效的SQL优化方式

 
阅读更多

对于像我这样开发经验不是很丰富的人而言,在编码的过程中往往考虑更多的是功能是否实现,而忽略了对SQL语句的优化以及程序整体性能的考虑。这使得在程序部署上线试运行的过程中产生这样或那样的问题。在调试解决这些问题的过程中,不知不觉地增加了开发维护的成本。下面就对几种比较常见的SQL语句的优化方式做一个总结:


1.能用oracle自带函数,或者用他的函数可以实现的效果,尽量用oracle的函数,因为他的函数的算法和实现函数的语言都是效率非常高的,一般情况下比我们写的要高效。

2. sql的关键字都大写,因为oracle 再执行sql时,会把所有的sql 转换为大写来执行

3.select 句子中最好不要出现* ,要写具体的列名,不然 oracle会一次解析每个字段,费时。

4.from 的表,如果是一张或者两张表,把条数最少的放在后面,如果是三张以上,把和其他有交叉的表的放在后面,所谓交叉,就是和其他表有关联的的意思,因为oracle的扫描是从下往上从右往左,这样的结果是可以尽量的少扫描表,

5.where 把可以过滤掉多条数据的条件往后放,以此类推。

6.删除重复记录的最好办法是用rowid

7.使用decode函数减少处理时间

8.用truncate table表明 代替delete from表名,因为第一个会删除表所对应的表空间

9.用where过滤,少用having过滤

10.使用表的别名也可以提高效率

11.用 EXISTS 替代 IN 、用 NOT EXISTS 替代 NOT IN :

12.使用索引来提高查询效率,但是索引建立的时候很有讲究,并不是每个字段都建立,那样反而会降低效率

关于索引的建议:索引是以空间换时间,但是过多的索引会增加INSERT、DELETE、UPDATE的负担,所以不必要的索引尽量删除,可能存在空值的字段尽量不要创建索引并且尽可能创建唯一性索引。

13.用 EXISTS 替换 DISTINCT

14.避免在索引上使用计算那些函数

15.用>= 来代替> ,因为有个确切的边线,可以让oracle跟好的确定边线

16.避免在索引列上用not ,因为这会让索引失效,也要避免使用is null ,is not null 操作

17.用union来代替 or 操作,如果可以的话。

18.用in 代替or ,如果可以的话。

19.用union all 代替 union ,如果可以的话 ,因为union 要去除重复的列,还要排序,费时

20.where句子中把过滤掉数据最的条件放在最后,一次往前罗列,因为oracle的检索顺序是从下往上,从右往左。


一般Web程序20%的性能问题可以由修改算法得到改善;80%的性能问题是因为SQL引起的。

优化SQL的目的是:在有限的资源上已最短的时间返回SQL结果,但不影响整体的数据库性能。

21、单表访问时,尽量使用效率高的索引进行辅助查询;多表访问时,可确定结果集的表尽量优先访问,在执行计划中排在前面。

 

分享到:
评论
1 楼 lpali 2011-08-20  
不错,喜欢总结是个好习惯。。。

相关推荐

Global site tag (gtag.js) - Google Analytics