如何在甲骨文中优化视图



我正在尝试改进数据库的物理设计以优化某些进程的性能,但我不知道如何改进此视图:

CREATE OR REPLACE VIEW CP_aragna AS (
SELECT nick, 100*sum(nuls)/count('c') pct_aragna 
FROM (SELECT nick,club,title,director,
NVL2(msg_date,0,1) nuls 
FROM (SELECT member nick, club, title, director 
FROM proposals) 
LEFT OUTER JOIN comments 
USING(nick,club,title,director) 
)
GROUP BY nick
HAVING sum(nuls)>0
) order by pct_aragna desc WITH READ ONLY;

我考虑过创建物化视图或索引

简化查询:

SELECT p.nick,
AVG(CASE WHEN c.msg_date IS NOT NULL THEN 100.0 ELSE 0 END) as pct_aragno
FROM proposals p LEFT JOIN
comments c
USING (nick, club, title, director) 
GROUP BY p.nick
HAVING COUNT(c.msg_date) > 0 
ORDER BY pct_aragna DESC;

Oracle 有一个很好的优化器,所以这可能不会影响性能。

这表明您具有由四部分组成的外键关系。 对于此版本,请确保您在comments(nick, club, title, director, msg_date)上具有索引。 甲骨文可能也可以利用group byproposals(nick)指数。

但是,这种复杂的外键关系容易出错。 我建议您使用自动生成的整数主键来连接表。 这将对性能产生一些影响,因为comments不需要这四列 - 节省了这四列所需的大部分空间。

最新更新