【发布时间】:2018-01-30 18:54:37
【问题描述】:
我有以下查询,这花费了太多时间,我必须优化查询性能。任何表上都没有索引。
但现在为了优化查询性能,我正在考虑创建索引。但不确定我必须创建索引的过滤列。 我想我会分组并计算所有过滤列条件的不同记录数,然后决定我应该在哪一列创建索引,但不确定。
Select * from ORDER_MART FOL where FOL.PARENT_PROD_SRCID
IN
(
select e.PARENT_PROD_SRCID
from SRC_GRP a
JOIN MAR_GRP b ON a.h_lpgrp_id = b.h_lpgrp_id
JOIN DATA_GRP e ON e.parent_prod_srcid = b.H_LOCPR_ID
WHERE a.CHILD_LOCPR_ID != 0
AND dt_id BETWEEN 20170101 AND 20170731
AND valid_order = 1
AND a.PROD_TP_CODE like 'C%'
)
AND FOL.PROD_SRCID = 0 and IS_CAPS = 1;
【问题讨论】:
-
哪些表按哪些键分区?解释计划是什么?为什么不能添加索引?
-
我已经添加了查询执行计划,由于PROD中的权限限制,我无法添加索引
-
您有
exists但没有关联子句。这看起来很可疑。 -
其实之前我使用 IN 代替存在只是为了尝试它是否可以提高性能。我不明白 abt 相关条款?
-
@GordonLinoff 我如何在存在中使用关联子句
标签: sql oracle optimization indexing data-partitioning