2017-06-02 57 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) 
) 

注意這裏可以爲全表掃描不同的原因:沒有看到完整的查詢和解釋計劃很難知道這是否會有所幫助。