2017-06-02 100 views
0

我在调整SQL查询。当我查看解释计划时,表INTERFACE_ADT_AOE_MASTER和TEST_REQUIRED将用于全表扫描。我想创建一个索引如何在sql中连接表中创建索引

表结构

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相同。

任何人都可以建议我如何为它创建索引?在此先感谢

+0

哪个sql数据库? – maSTAShuFu

+0

@maSTAShuFu Oracle 11 g – kushi

+0

抱歉,从未使用过oracle,但是在通过SSMS的sql-server中,我们可以使用查询执行计划来获取建议的索引来创建 – maSTAShuFu

回答

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) 
) 

注意这里可以为全表扫描不同的原因:没有看到完整的查询和解释计划很难知道这是否会有所帮助。