ORACLE通用查询性能优化

来源:互联网 发布:淘宝优惠链接怎么弄的 编辑:程序博客网 时间:2024/05/23 19:20

声明:测试环境

(1)windows xp,2G内存,2.66G 单核CPU

(2)manager用户有单独的表空间与临时表空间

(3)300万条数据

表结构如下

 

用来造数据的存储过程,如下:

 

表的主键序列

 

表的触发器

 

一:最常用的ORACLE分页(单表)

(1)

select * from(
  select rownum rn, a1.* from(
    select u.id, u.name, u.age, u.money, u.class_id, u.rand_code, u.v_date_time, u.d_date_time
    from users u
  )a1 where rownum <= 10
)where rn >=5

 

(2)

select * from(
  select rownum rn, a1.* from(
    select u.id, u.name, u.age, u.money, u.class_id, u.rand_code, u.v_date_time, u.d_date_time
    from users u
  )a1
)where rn between 5 and 10

 

结论:(1)的平均时间在0.03xx秒,(2)的平均时间在1.25xx秒, 125/3, 效率大概相差40倍

------1:将(1)和(2)的from user u 改为 from user u order by u.id desc (注:id为PK),

(1)查询时间平均为0.04x秒,(2)的平均查询时间为3.4xx秒,340/4,效率大概相差快100倍

------2:将(1)和(2)的from user u 改为 from user u order by u.age desc (注:age无索引),

(1)查询时间平均为 1.9xx秒,(2)的平均查询时间为30.xxx秒,300/2,效率大概相差快150倍

------3:将(1)和(2)的from user u 改为 from user u order by u.age desc, u.name desc(注:age无索引, name无索引),

(1)查询时间平均为 1.9xx秒,(2)的平均查询时间为32.xxx秒,320/2,效率大概相差快160倍

------4:在3的基础上只加上一个inner join

(1)查询时间平均为7.1 xx秒,(2)的平均查询时间为33.xxx秒,330/7,效率大概相差快 50倍


二:关于where 1 = 1(单表)

select u.*
from users u
where u.rand_code in (37908470,342553519,417764204)
and 1 = 1

加不加 and 1 = 1 这个条件,查询时间都在0.9xx秒,性能没有大的波动

 

三:关于 select u.* 和 select u.i, u.name, u.age (单表)

测试用SQL语句同二, 查询时间也在0.9xx秒,性能没有大的波动

 

四:where u.age = 20 与 where u.age = '20'(单表)

测试用SQL语句同二, 查询时间也在0.9xx秒,性能没有大的波动

 

五:关于select count(*), count(1) 与 count(u.age)(单表)

测试用SQL语句同二, 查询时间也在0.5xx秒,性能没有大的波动

 

原创粉丝点击