读书人

SQL文优化有关问题

发布时间: 2012-02-02 23:57:14 作者: rapoo

SQL文优化问题
SELECT *
FROM a,b,c
WHERE
a.f1 = b.f1 AND
a.f2 = c.f1 AND
a.f3 = c.f2

a表pk f1
b表pk f1
c表pk f1,f2

a表,5万条记录
b表,10条
c表,100条

现在这个sql文性能很差,甚至把b表所有记录清空了也一样。
怎么进行优化?

[解决办法]
对a、b、c三个表做分析。exec dbms_stats.gather_table_stats( 'USERNAME ', 'TABLENAME ')
[解决办法]
sqlplus 看执行计划

sql> set autotrace trace exp
sql> SELECT *
FROM a,b,c
WHERE
a.f1 = b.f1 AND
a.f2 = c.f1 AND
a.f3 = c.f2

看下执行计划

查看等待事件 select * from v$session_wait

估计是A表没有用上索引,建立A表的(F1,F2,F3)复合索引再试下
[解决办法]
SELECT *
FROM c,a,b
WHERE
a.f2 = c.f1 AND
a.f3 = c.f2 AND
b.f1 = a.f1

读书人网 >oracle

热点推荐