问题描述
您好,我创建了一个视图来创建子查询(从两个表中选择) 这是 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 数据的项目,唯一可行的方法是使用分区。