Oracle大数据量分区后查询效率低下

php中文网
发布: 2016-06-07 17:29:05
原创
1861人浏览过

Oracle数据库中有2张表,一张是tm_bus_realtime_log当前表 只有当前一天的数据。数据量有几百万的数据。还有一张表,tm_bus_rea

场景描述:

  Oracle数据库中有2张表,一张是tm_bus_realtime_log当前表 只有当前一天的数据。数据量有几百万的数据。还有一张表,tm_bus_realtime_his历史表 进行了分区。每10天一分区,就是每个月有3个分区。整个历史表有几亿的数据量。每个分区有千万条数据。

问题描述:

  在从历史表的分区中,查询数据时,很慢,由于数据量非常大,如果想查询几天的数据更慢?应该如何提高查询的速度?

在论坛上发了一个关于这方面的一个帖子,非常感谢留下意见的人,一些好的建议如下:

1 改成一天一个分区

2 对历史数据 进行清理,比如只保存2年的数据

3 依据计划看看索引建的合适不

4 如果你的查询条件中,除了时间,如果还有其他的字段,那就要相应的建上本地索引

5 如果历史表数据不更改的话,可以考虑在时间字段建立一个trunc(XX)位图函数索引,查询的时候再指定分区。

6 表分区、那索引分区

7 依据where条件而定。

九歌
九歌

九歌--人工智能诗歌写作系统

九歌 322
查看详情 九歌

我的一些做法:

其实就是想做两个界面,把需要的一些综合信息查询出来进行展示,这些信息数据量很大。进行了分区。但是查询出来显示的时候,当天一天的数据还可以,但是一但垮天,跨分区之后,就查询的速度特别的慢。

1 对于当前表tm_bus_realtime_log。查看它的索引,只有一个(索引名:INDEX_BUS_REALTIME 字段名:UPLOAD_TIME)

而我的查询SQL里面的条件里面有2个字段,一个是bus_no,一个是upload_tiime,应该把索引字段紧跟到where条件后。

2 对于查询出来的数据,不要使用*,最好是具体的字段。

3 在plsql里面按F5,对该SQL语句,看一下它的执行计划,看是进行的全表扫描,,还是走的索引。

4 索引不适合建立很多,多了,也会影响查询效率。当时就把其中一个没用的多余的索引删除了。速度也就快了。

5 尽量不要使用in。使用exists.

6 优化代码。

现在查询出来的数据快多了!

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号