ORACLE通用查询性能优化

声明:测试环境

(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秒, 性能没有大的波动

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值