CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: [求助] 关于SQL优化的问题
德里罗
支柱会员
Rank: 10Rank: 10Rank: 10


UID 328556
精华 0
积分 16759
帖子 1575
威望 7464
ZD币 2067 元
阅读权限 210
注册 2008-5-21
状态 离线
  楼主
发表于 2008-10-10 15:00  资料  个人空间  短消息  加为好友 
开发者在线

关于SQL优化的问题

下面的sql在数据较大的时候效率较低,请问各位高手如何优化?
不胜感激

UPDATE T270839 target
SET target.inconsistency = (
    SELECT CASE
        WHEN count(*) < 2 THEN 0
        WHEN STDDEV(refset.value) > 0 THEN (target.value - AVG(refset.value))/STDDEV(refset.value)
          ELSE 0
        END
  FROM T270839 refset
        WHERE LEVEL <= 2 AND row_id IS NULL
  START WITH refset.node_id = target.node_id
  CONNECT BY refset.parent_node_id = PRIOR refset.node_id)


下面是相关的信息可供参考:
The execution plan shows that for each row in "target", T270839 table is full scanned 3 times.

Consider using merge statement without insert:
[url=http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::11_QUESTION_ID:556373000346392260]http://asktom.oracle.com/pls/ask ... :556373000346392260[/url]
or "create table as select " which removes the update and does not produce redo.
Also,
- connect by could be replaced by self join
- aggregate functions could be replaced with analytics: count(*) -> count(*) over (partition by parent.parent_node_id)

根据上面的信息,有些疑惑:
1.在有聚合函数的sql里如何用join来连接?
2.count(*) 跟count(1)和 count(columnName)那个效率更高些?




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-7-5 08:00

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.058781 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版