SELECT …..
FROM WORKLIST_IV WITH ( READPAST )
WHERE ( ( PTCP_KIND = N'1' AND PTCP_COMP_ID = N’655’
AND PTCP_USR = N'S122484051' )
OR ( ( PTCP_KIND = N'3' AND PTCP_DOMAIN_ID = N'GSS' AND PTCP_COMP_ID = N’655’
)
AND ( (PTCP_OU = N'379132200C2202' AND PTCP_RELKIND = N'1')
)
)
OR ( ( PTCP_KIND = N'2' AND PTCP_DOMAIN_ID = N'GSS' AND PTCP_COMP_ID = N’655’
)
AND ( ( PTCP_ROL = N'ODDeskUsr_Rol_4' AND PTCP_RELKIND = N'1' )
OR ( PTCP_ROL = N'ODDeskUsr_Rol_4_379132200C2202' AND PTCP_RELKIND = N'1' )
OR ( PTCP_ROL = N'SWS_OuExamRol' AND PTCP_RELKIND = N'1' )
OR ( PTCP_ROL = N'SWS_OuExamRol_379132200C22AA' AND PTCP_RELKIND = N'1' )
OR ( PTCP_ROL = N'SWSProcesser_Rol' AND PTCP_RELKIND = N'1' )
)
)
OR ( ( PTCP_KIND = N'5' AND PTCP_DOMAIN_ID = N'GSS' AND PTCP_COMP_ID = N’655’
)
AND ( ( PTCP_OU = N'379132200C2202' AND PTCP_ROL = N'ODDeskUsr_Rol_4' AND PTCP_RELKIND = N'1' )
OR ( PTCP_OU = N'379132200C2202' AND PTCP_ROL = N'ODDeskUsr_Rol_4_379132200C2202' AND PTCP_RELKIND = N'1' )
OR ( PTCP_OU = N'379132200C2202' AND PTCP_ROL = N'SWS_OuExamRol' AND PTCP_RELKIND = N'1' )
OR ( PTCP_OU = N'379132200C2202' AND PTCP_ROL = N'SWS_OuExamRol_379132200C22AA' AND PTCP_RELKIND = N'1' )
OR ( PTCP_OU = N'379132200C2202' AND PTCP_ROL = N'SWSProcesser_Rol' AND PTCP_RELKIND = N'1' )
)
)
);
執行計畫如下,CREATE NONCLUSTERED INDEX IDX_WKITEM_PTCP_I_RM
ON [dbo].[WKITEM_PTCP_I] ([PTCP_COMP_ID],[PTCP_KIND],[PTCP_USR],[PTCP_ROL],[PTCP_ACTN_STATE])
INCLUDE ([WKITEM_ID],[PTCP_ID],[PTCP_NAME],[PTCP_DESC],[PTCP_DOMAIN_ID],[PTCP_OU],[PTCP_GRP],[PTCP_RELKIND],[PTCP_PRO_STATE],[PTCP_RECV_TIME],[PTCP_COMM])
結果執行計畫好不到那裡去,如下,CREATE INDEX IX_WKITEM_PTCP_USR ON WKITEM_PTCP_I(PTCP_KIND, PTCP_USR, PTCP_COMP_ID)
CREATE INDEX IX_WKITEM_PTCP_OU_1 ON WKITEM_PTCP_I(PTCP_KIND, PTCP_OU, PTCP_RELKIND)
CREATE INDEX IX_WKITEM_PTCP_ROL ON WKITEM_PTCP_I(PTCP_KIND, PTCP_ROL, PTCP_RELKIND)
CREATE INDEX IX_WKITEM_PTCP_OU_2 ON WKITEM_PTCP_I(PTCP_KIND, PTCP_OU, PTCP_RELKIND, PTCP_ROL)
建立完成後,再執行SQL,看一下執行計畫為何,如下,--其他的 OR 還有其他的 WHERE 條件,也放在 INCLUDE 之中 CREATE INDEX IX_WKITEM_PTCP_OU_1 ON WKITEM_PTCP_I(PTCP_KIND, PTCP_OU, PTCP_RELKIND)
INCLUDE (PTCP_DOMAIN_ID, PTCP_COMP_ID);CREATE INDEX IX_WKITEM_PTCP_ROL ON WKITEM_PTCP_I(PTCP_KIND, PTCP_ROL, PTCP_RELKIND)
INCLUDE (PTCP_DOMAIN_ID, PTCP_COMP_ID);CREATE INDEX IX_WKITEM_PTCP_OU_2 ON WKITEM_PTCP_I(PTCP_KIND, PTCP_OU, PTCP_RELKIND, PTCP_ROL)
INCLUDE ( PTCP_DOMAIN_ID, PTCP_COMP_ID);
執行計畫如下,drop index IX_WKITEM_PTCP_OU_1 ON WKITEM_PTCP_I;EXEC sp_rename N'WKITEM_PTCP_I.IX_WKITEM_PTCP_OU_2', N'IX_WKITEM_PTCP_OU', N'INDEX';
再看一下執行計畫, IX_WKITEM_PTCP_OU_2 的名稱就改成了 IX_WKITEM_PTCP_OU,如下,CREATE INDEX IX_WKITEM_PTCP_USR ON WKITEM_PTCP_I(PTCP_KIND, PTCP_USR, PTCP_COMP_ID)
--其他的 OR 還有其他的 WHERE 條件,也放在 INCLUDE 之中 CREATE INDEX IX_WKITEM_PTCP_ROL ON WKITEM_PTCP_I(PTCP_KIND, PTCP_ROL, PTCP_RELKIND)
INCLUDE (PTCP_DOMAIN_ID, PTCP_COMP_ID);CREATE INDEX IX_WKITEM_PTCP_OU ON WKITEM_PTCP_I(PTCP_KIND, PTCP_OU, PTCP_RELKIND, PTCP_ROL)
INCLUDE (PTCP_DOMAIN_ID, PTCP_COMP_ID);