i_have_a_cat 2016-07-25 03:46 采纳率: 40%
浏览 1555

oracle 有7张表连接查询,选择一个时间区间来查询都要3分钟,实在太慢了

大家有没有什么解决的办法
这是from后面的语句,把原来的<=都替换为between了,而且时间都有索引,只不过不是函数索引
FROM t1(表里有700w条数据) a
LEFT JOIN t2 b
ON a.po_id = b.id
AND b.is_deleted='0'
LEFT JOIN t3(表里有300w条数据) c
ON a.order_id = c.id
AND c.is_deleted='0'
LEFT JOIN t4(300w条数据) t
ON a.business_id = t.id
AND t.is_deleted ='0'
LEFT t5(120w条数据) n
ON t.fin_card_id = n.id
AND n.is_deleted ='0'
LEFT JOIN t6(100w条数据) g
ON a.GROUP_NUM = g.GROUP_NUM
AND g.is_deleted='0'
LEFT JOIN t7 d
ON a.fee_item = d.code
AND d.type = 'COST_TYPE'
AND d.is_deleted ='0'
WHERE a.CP_TYPE = 'Payment'
--AND instr(lower(a.GROUP_NUM), lower('GH')) > 0
AND a.COMPANY_ID ='0E277EEBD52B5AC0E0532429030A7194'
AND a.STATUS IN ('BeConfirm', 'Confirmed', 'ToFinance', 'Transfer')
--AND (c.START_TIME >= to_date('2016-07-01','yyyy-mm-dd')
--OR g.DEPARTURE_DATE >= to_date('2016-07-01','yyyy-mm-dd'))
--AND (c.START_TIME <to_date('2016-07-22','yyyy-MM-dd')+1
--OR g.DEPARTURE_DATE <to_date('2016-07-22','yyyy-MM-dd')+1)
and ((c.START_TIME between to_date('2015-07-01','yyyy-mm-dd') and to_date('2015-07-25','yyyy-MM-dd')+1) or (g.DEPARTURE_DATE between to_date('2015-07-01','yyyy-mm-dd') and to_date('2015-07-25','yyyy-MM-dd')+1))
AND a.is_deleted = '0'
ORDER BY a.GROUP_NUM,
c.ORDER_CODE,
c.START_TIME,
c.id DESC;

  • 写回答

2条回答 默认 最新

  • i_have_a_cat 2016-07-25 03:46
    关注

    而且很多都不能走索引,很多条件逗得用模糊查询,除了状态啊,时间啊

    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型