如何在sql

时间:2017-06-02 06:43:18

标签: sql indexing oracle11g

我正在调整SQL查询。当我检查解释计划时,表格INTERFACE_ADT_AOE_MASTER和TEST_REQUIRED将进行全表扫描。我想创建一个索引

表格结构

Table ***INTERFACE_ADT_AOE_MASTER

Columns***
TESTCODE_MASTER_ID,
SOURCE_SYSTEM,
TEST_CODE,
QUESTION_CODE,
EAST_WEST_FLAG,
UOM,
STATUS,
MATCH_TYPE,
CREATED_DT,
STATUS_UPDATED_DTM,
QUESTION_CAPTION


Table ***TEST_REQUIRED***
Columns
TEST_REQUIRED_ID  Primary Key, 
TEST_ID,
REQUIRED_TEST_CODE,
CREATED_DATE,
MODIFIED_DATE

这是这些表用于全表扫描的子查询。

(SELECT TEST_ID
      FROM TEST_REQUIRED
      WHERE REQUIRED_TEST_CODE IN
        (SELECT TEST_CODE FROM INTERFACE_ADT_AOE_MASTER
        )
      )

REQUIRED_TEST_CODETEST_CODE相同。

有人可以建议我如何为它创建索引吗?提前致谢

1 个答案:

答案 0 :(得分:0)

尝试在INTERFACE_ADT_AOE_MASTER.TEST_CODE上添加索引并将子查询更改为:

(SELECT TEST_ID
      FROM TEST_REQUIRED
      WHERE EXISTS 
         ( SELECT 1 FROM INTERFACE_ADT_AOE_MASTER WHERE TEST_CODE = REQUIRED_TEST_CODE )
)

请注意,全表扫描可能有不同的原因:没有看到完整的查询和EXPLAIN PLAN,很难知道这是否有用。