Sql 从ORACLE性能视图中提取数据

Sql 从ORACLE性能视图中提取数据,sql,oracle,sql-view,sqlperformance,Sql,Oracle,Sql View,Sqlperformance,您好,我创建了一个视图,以使子查询从两个表中进行选择 以下是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.I

您好,我创建了一个视图,以使子查询从两个表中进行选择 以下是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_视图中选择数据,则平均执行时间为135953秒

表1包含124600329行 表公司共609行

我的问题是: 如何加快执行速度

我创建了两个索引:

员工索引ID、公司ID、部门ID 和公司索引公司ID

你能帮我让选择跑得更快吗?创建另一个索引或更改联接

PS:我无法在此数据库中创建物化视图


提前感谢您的帮助。

您有很多事情要做。 如果您必须使用视图,并且无法创建计划作业以在表中插入数据,我将删除我的答案。 视图没有支持数亿数据的范围。是几百万的

插入数据时必须清除索引。如果插入带有索引的数据,则过程将慢100倍。您可以删除、创建或更新它们

在表中,公司创建分区。 如果您有很多ID,请使用范围。 如果您有大约100个ID,请列出分区

您不需要索引,因为要连接的子句没有优化,索引被指定为严格的WHERE子句


我们有一个包含433.000.000个数据的项目,唯一可行的方法是使用分区。

通常,您不希望在视图的定义中包含ORDER BY,而应该将其包含在使用视图的select语句中。您是否尝试过通过删除订单?这对绩效有何影响?唯一能帮助您的指标是employee.department。但这取决于1.24亿行中有多少行不是“DEP_004”。如果有很多,那么没有索引可以帮助你。最有意义的问题是,为什么不能在这个数据库中创建物化视图?这是物化视图最重要的用途:加快您的查询速度。@eGegyd如果我通过删除订单没有影响,我尝试过现在@mathguy创建物化视图将在数据库上产生缓慢的速度,它将生成大量的重做日志。。这就是为什么我不能使用它我创建了一个物化视图提交时快速刷新你能提供慢的特定查询吗?此外,请包括执行计划。