如何解决从视图中提取数据 ORACLE 性能
您好,我创建了一个视图来创建子查询(从两个表中选择) 这是 sql 命令:
CREATE OR REPLACE VIEW EMPLOYEER_VIEW
AS
SELECT A.ID,A.FIRST_NAME||' '||A.LAST_NAME AS NAME,B.COMPANY_NAME
FROM EMPLOY A,COMPANY B
WHERE A.COMPANY_ID=B.COMPANY_ID
AND A.DEPARTEMENT !='DEP_004'
ORDER BY A.ID;
如果我从 EMPLOYEER_VIEW 中选择数据,平均执行时间为 135,953 秒
表 EMPLOY contiens 124600329 行 表 COMPANY 包含 609 行。
我的问题是: 如何让执行速度更快?
我创建了两个索引:
emply_index (ID,COMPANY_ID,DEPARTEMENT) 和 company_index(COMPANY_ID)
你能帮我让选择运行得更快吗? (创建另一个索引或更改连接)
PS:我无法在此数据库中创建物化视图。
在此先感谢您的帮助。
解决方法
你有很多事情要做。 如果您必须使用视图,并且无法创建计划作业以在表中插入数据,我将删除我的答案。 VIEWs 没有支持数亿数据的范围。是几百万。
-
INDEXes 插入数据时必须清除。如果您插入带有索引的数据,该过程会慢 100 倍。 (您可以删除并创建或更新它们)。
-
在表公司 CREATE PARTITION。 如果您有很多 ID,请使用 RANGE。 如果您有大约 100 个 ID,请列出分区。
不需要Index,因为JOIN的子句没有优化,INDEXes被指定为严格的WHERE子句。
我们有一个包含 433.000.000 数据的项目,唯一可行的方法是使用分区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。