2. 索引失效,如where lower(name)=’ssss’, name上的索引会失效。 或者隐式的数据类型转换:where item_id=12345, 这里item_id是varchar2, 就会先隐式的转换成数字型,索引失效了。
3. PLSQL里的程序给临时表转载了很多数据,但在程序里没有对表进行分析,oracle走了错误的表连接,本来该用hash_join, 用了nested_loop, 严重影响性能。
4. 重新设计索引,可考虑把查询中经常用到的列加到索引中,oracle扫描时就会只扫描index: full index scan,不用扫描数据段了。
5. PLSQL里的多表复杂连接,拆分成几个小的连接,用上临时表保存中间数据。
6. 表的设计问题,example:
三张表几乎都几千万行, 找出在ITEM表里的但没存在LINK, ITEM_LINK 里已经链接好了的ITEM_ID, 下面第一种方法是传统方法,用not exists直观, 第二种是用左外连接. 但从两种方法看效率都不高, 都要大量的连接,要nested loop. 也许修改表结构是最好的选择了,给ITEM表加个字段,如LINK_STATUS, 在ITEM_LINK,LINK已经link了,就给这个字段置位.以后再来判断就不需要用not exists来判断是否在LINK,ITEM_LINK表里已link了!
(本来要跑10分钟,加了status字段后,30秒。)
7. 找出性能低效的SQL语句:
select ELAPSED_TIME,EXECUTIONS,FIRST_LOAD_TIME,ELAPSED_TIME/decode(executions,0,1,executions)/1000000/60 "Mins", sql_text from V$SQL where module='JDBC Thin Client' order by 4 desc
Normal0falsefalsefalseMicrosoftInternetExplorer4
Normal0falsefalsefalseMicrosoftInternetExplorer4
Continue….
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14377/viewspace-1060120/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14377/viewspace-1060120/