Oracle大数据量分区后查询效率低下 |
您所在的位置:网站首页 › mysql表分区后如何查询 › Oracle大数据量分区后查询效率低下 |
场景描述: Oracle数据库中有2张表,一张是tm_bus_realtime_log当前表 只有当前一天的数据。数据量有几百万的数据。还有一张表,tm_bus_realtime_his历史表 进行了分区。每10天一分区,就是每个月有3个分区。整个历史表有几亿的数据量。每个分区有千万条数据。 问题描述: 在从历史表的分区中,查询数据时,很慢,由于数据量非常大,如果想查询几天的数据更慢?应该如何提高查询的速度? 在论坛上发了一个关于这方面的一个帖子,非常感谢留下意见的人,一些好的建议如下: 1 改成一天一个分区 2 对历史数据 进行清理,比如只保存2年的数据 3 依据计划看看索引建的合适不 4 如果你的查询条件中,除了时间,如果还有其他的字段,那就要相应的建上本地索引 5 如果历史表数据不更改的话,可以考虑在时间字段建立一个trunc(XX)位图函数索引,查询的时候再指定分区。 6 表分区、那索引分区 7 依据where条件而定。 我的一些做法: 其实就是想做两个界面,把需要的一些综合信息查询出来进行展示,这些信息数据量很大。进行了分区。但是查询出来显示的时候,当天一天的数据还可以,但是一但垮天,跨分区之后,就查询的速度特别的慢。 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 优化代码。 现在查询出来的数据快多了! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |