欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-04-25 21:24:07
...

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条件而定。

我的一些做法:

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

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 优化代码。

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