大数据表关联查询效率慢的问题

zmliu66 2014-08-26 10:46:33

问题描述:
1)XX_PC_PRO_WELL_DAILY a 此表有680万条数据,在prod_date字段上有索引,但查询时走的是全表查询;加上between and的时间条件后的数据为 230多万,和子查询b表join关联后的总数据为3万。
2)在这2个字段(well_id,prod_date)上也有索引
3)上图中的查询执行完需要30多秒,请问如何提高查询效率?
...全文
1005 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmliu66 2014-08-29
  • 打赏
  • 举报
回复
引用 2 楼 wildwave 的回复:
结果集都有300多万的量级,说明没有有效的过滤条件。hash join是对的,要优化只能通过io 如果a表字段超过十几个的话,可以试试在a表上建组合索引(prod_date,well_id,liq_prod_daily,oil_prod_daily,water_prod_daily)
XX_PC_PRO_WELL_DAILY 这个表的字段比较多,我按你的方法见了组合索引,现在9秒左右,提高了3倍多。还有没有其它提速的方法? 能不能加hint人工调整执行计划,让从下图红色框中的左边执行计划变成右边的?因为join on中的条件和where中的条件都存在于索引中,所以能不能先和索引hash
小灰狼W 2014-08-29
  • 打赏
  • 举报
回复
table access by index rowid... 你图片上的代码不全,看看是否还有xx_pc_pro_well_daily表上用到的字段不在该组合索引中,可以加上 下次代码和执行计划贴得全一点吧
zmliu66 2014-08-26
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
改为这样应该会快一点,先通过索引进行检索,然后再进行连接操作
(select id,prod_date from XX_PC_PRO_WELL_DAILY 
WHERE prod_date BETWEEN  AND ) A
你好,试了这种方法,还是很慢,和之前的速度差不多,30多秒。下面是执行计划:
小灰狼W 2014-08-26
  • 打赏
  • 举报
回复
结果集都有300多万的量级,说明没有有效的过滤条件。hash join是对的,要优化只能通过io 如果a表字段超过十几个的话,可以试试在a表上建组合索引(prod_date,well_id,liq_prod_daily,oil_prod_daily,water_prod_daily)
bw555 2014-08-26
  • 打赏
  • 举报
回复
改为这样应该会快一点,先通过索引进行检索,然后再进行连接操作
(select id,prod_date from XX_PC_PRO_WELL_DAILY 
WHERE prod_date BETWEEN  AND ) A

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧