声明:测试环境
(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秒, 性能没有大的波动