• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle大数据量查询实际分析

mysql 搞代码 4年前 (2022-01-09) 8次浏览 已收录 0个评论

刚做一张5000万条数据的数据抽取,当前表同时还在继续insert操作,每分钟几百条数据。所以加分区后的查询效率提高十几倍,所以大

Oracle数据库:

刚做一张5000万条数据的数据抽取,当前表同时还在继续insert操作,每分钟几百条数据。

该表按照时间,以月份为单位做的表分区,没有任何索引,当前共有14个字段,平均每个字段30个字节。当前表分区从201101到201512每月一个分区

测试服务器:xeno 5650,32核cpu,win2003操作系统,,物理内存16G;测试工具plsql

1.最开始的查询:

string.Format(@”select * from
(select r.id,r.carcode,r.longtitude,r.latitude,r.velocity,r.gpstime,r.isonline from t_gps_record r where id in(
select min(id) from t_gps_record r where carcode='{0}’
group by to_char(gpstime,’yyyy-MM-dd HH24:mi’))
and carcode='{0}’
and gpstime>(sel

本文来源gao!%daima.com搞$代*!码9网(

ect nvl((select max(gpstime) from t_gps_carposition where carcode='{0}’),(select min(gpstime) from t_gps_record where carcode='{0}’)) from dual)
order by gpstime asc
) where rownum<=200 ", row["carcode"].ToString());

一开始以200条数据为段进行查询,查询一次2分钟16秒;

后来查20条,2分钟14秒;基本跟条数无关。

2.后来把最小时间写成固定的:

string.Format(@”select * from
(select r.id,r.carcode,r.longtitude,r.latitude,r.velocity,r.gpstime,r.isonline from t_gps_record r where id in(
select min(id) from t_gps_record r where carcode='{0}’
group by to_char(gpstime,’yyyy-MM-dd HH24:mi’))
and carcode='{0}’
and gpstime>to_date(‘2011-11-1 00:00:00′,’yyyy-mm-dd HH24:mi:ss’)
order by gpstime asc
) where rownum<=200 ", row["carcode"].ToString());

查询时间 1分34秒。

3.不加分区查询

select r.id,r.carcode,r.longtitude,r.latitude,r.velocity,r.gpstime,r.isonline from t_gps_record r where id in(
select min(id) from t_gps_record r
group by carcode, to_char(gpstime,’yyyy-MM-dd HH24:mi’))
and gpstime>=to_date(‘2011-11-1 9:00:00′,’yyyy-mm-dd HH24:mi:ss’) and gpstime<=to_date('2011-11-1 9:59:59','yyyy-mm-dd HH24:mi:ss')
order by gpstime asc

查询时间:3分29秒,共1426条

4.添加分区查询

select r.id,r.carcode,r.longtitude,r.latitude,r.velocity,r.gpstime,r.isonline from t_gps_record r where id in(
select min(id) from t_gps_record partition(GPSHISTORY201111) r
group by carcode, to_char(gpstime,’yyyy-MM-dd HH24:mi’))
and gpstime>=to_date(‘2011-11-1 9:00:00′,’yyyy-mm-dd HH24:mi:ss’) and gpstime<=to_date('2011-11-1 9:59:59','yyyy-mm-dd HH24:mi:ss')
order by gpstime asc

添加分区后查询:17s,共1426条

所以加分区后的查询效率提高十几倍,所以大数据量建立分区表是相当重要的。

相关阅读:

Oracle 并行查询

Oracle用户信息查询操作语句

Oracle单表查询某列最大最小值的性能问题

回收站引发Oracle查询表空间使用缓慢


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle大数据量查询实际分析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址