从视图中提取数据 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 数据的项目,唯一可行的方法是使用分区。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...