sql—如何在oracle中优化视图

a9wyjsp7  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(269)

我正在尝试改进数据库的物理设计,以优化某些进程的性能,但我没有´我不知道怎样才能改善这种看法:

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;

我想创建一个物化视图或索引

06odsfpq

06odsfpq1#

简化查询:

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) . oracle可能会利用 proposals(nick) 对于 group by 也。
然而,这种复杂的外键关系很容易出错。我建议您使用自动生成的整数主键来连接表。这将对性能产生一些影响,因为这四个列在 comments --节省了这四列所需的大部分空间。

相关问题