首页 新闻 会员 周边

Oracle 性能优化

0
悬赏园豆:20 [已关闭问题] 关闭于 2010-11-17 15:59

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 的数据不是太大。

条件语句引用 的字段都加有索引

这样查询比较长的时间段时例如一个月的数据,会花费很长时间(几分钟),请问有什么办法提高性能,让查询速度提高到半分钟内?

Liujx的主页 Liujx | 初学一级 | 园豆:9
提问于:2010-11-05 15:29
< >
分享
所有回答(4)
0

1,尽量把能筛选面多的条件放在查询条件的前面

2,select * 改成select 你需要的字段

茂茂 | 园豆:2892 (老鸟四级) | 2010-11-05 15:33
0

查看执行计划,有没有用索引?

如果可以,表分区可以考虑一下

amyeeq | 园豆:77 (初学一级) | 2010-11-05 15:57
0

建议,你的in语句改成 表关联的形式,性能会有提升,在计算的列上建立函数索引等,

索引是提升性能明显的不错方式

hotdefans | 园豆:215 (菜鸟二级) | 2010-11-16 08:46
0

1.SQL  语句本身书写存在不合理之处

2.数据库表设计有点问题

3.可以考虑结合VIEW

4.表 建索引,建分区,碎片整理下

5.能逻辑读

6.exists  比 IN  执行效率要高

等等

 

上帝_BayaiM | 园豆:202 (菜鸟二级) | 2014-07-01 13:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册