SQL 语句:
SELECT *
FROM EFRESH E1, LOCATIONS L, PRODUCTS P, COMMISSION_COMBINED C
WHERE E1.LOCATIONID = L.LOCATIONID AND E1.PRODCODE = P.PRODCODE
AND E1.TRANSNO = C.TRANSNO (+)
AND ( C.MERCHANTID = E1.MERCHANTID or C.MERCHANTID is NULL )
AND (E1.MERCHANTID) in ( select MERCHANTID from MERCHANT where merchantid like '%')
AND E1.DATESOLD BETWEEN TO_DATE('2010-10-05','yyyy-mm-dd') AND TO_DATE('2010-11-03 23:59:59','yyyy-mm-dd HH24:mi:ss')
表EFRESH 有上千万数据量。
COMMISSION_COMBINED 为视图对象 数据量也是几千万。
表MERCHANT 也就几万条数据。
表 LOCATIONS L, PRODUCTS P 的数据不是太大。
条件语句引用 的字段都加有索引
这样查询比较长的时间段时例如一个月的数据,会花费很长时间(几分钟),请问有什么办法提高性能,让查询速度提高到半分钟内?
1,尽量把能筛选面多的条件放在查询条件的前面
2,select * 改成select 你需要的字段
查看执行计划,有没有用索引?
如果可以,表分区可以考虑一下
建议,你的in语句改成 表关联的形式,性能会有提升,在计算的列上建立函数索引等,
索引是提升性能明显的不错方式
1.SQL 语句本身书写存在不合理之处
2.数据库表设计有点问题
3.可以考虑结合VIEW
4.表 建索引,建分区,碎片整理下
5.能逻辑读
6.exists 比 IN 执行效率要高
等等