日期:2014-05-17  浏览次数:20834 次

Oracle查询的效率问题
  现有一个Autotips控件(类似谷歌,百度查询。可在OSChina搜到这个组件),客户想要将其实现到自己的系统中。这里面有一种数据库模式,是即时搜索的。也就是每次录入文字都与数据库进行交互。

   现在我已经为客户整合了这个组件。但是现在客户要求我对这个组件对数据库性能的影响做一个评估。但是由于我对ORACLE这块的性能优化等方面知之甚少。所以从网上找了两段SQL脚本。以及抓取了一个小时内的awr报告。可是因为相关知识太少,不知其所以然,因此这个报告不能描述的使人信服。所以来这里请教一下大家。给讲解一下。

代码1:查询出来的结果集rds_exec_ratio均为0
SELECT   * 
    FROM (SELECT   b.username username, 
                     a.disk_reads 
                   / DECODE (a.executions, 0, 1, a.executions) rds_exec_ratio, 
                   a.sql_text STATEMENT 
              FROM v$sqlarea a, dba_users b 
             WHERE a.parsing_user_id = b.user_id AND b.username = 'DEVHXYW' 
          ORDER BY rds_exec_ratio DESC) 
  WHERE STATEMENT LIKE 'SELECT comcname,comcode FROM prpdcompany where%' AND ROWNUM < 11 
ORDER BY rds_exec_ratio DESC


代码2:查询不出结果集
select sql_text,operation_type,policy,(last_memory_used/1024/1024), 
last_execution,last_tempseg_size 
from v$sql i,v$sql_workarea a 
where i.hash_value=a.hash_value 
and sql_text LIKE 'SELECT comcname,comcode FROM prpdcompany where%'


参照网上说明,说是可以查询最占性能的语句和占用内存的脚本。
而后,我查看了一下awr的报告。对于关键性的'SELECT comcname,comcode FROM prpdcompany where%并没有在AWR报告中找到,是否说明他的影像可以忽略不计呢?

------解决方案--------------------
那个,有些操作,不宜,交给sql去做。
你可以把查询出来的结果,再处理,这样可以减轻select的负担。
------解决方案--------------------
根据Oracle的解析,全部大写或者小写,你可以建立索引,在用到<?的地方尽量用 <=