首先:我不是一個DB專家,所以請盡情享受,如果問題很瑣碎...火鳥2.5 SQL查詢執行計劃不使用索引或聲明
我有一個子表CHILD
查詢尋找在主表PARENT
中增加一些值以確定是否要加載條目。
查詢看起來像這樣
SELECT C.*, P.DATE, P.STATUS
FROM CHILD C, PARENT P
WHERE C.PARENT_ID = P.ID
AND (P.DATE > '01.01.2015' OR (P.STATUS <> 1 AND P.STATUS <> 9));
我選擇的目的STATUS
價值觀強調的是,我需要使用的不平等,我需要選擇從是不連續的狀態值。
我對PARENT.ID
有外鍵CHILD.PARENT_ID
,並創建了一個索引CHILD.PARENT_ID
。我還在和STATUS
字段的表PARENT
上創建了索引。
現在,當我更換OR
與和AND
CHILD
使用上PARENT_ID
和PARENT
索引使用上DATE, STATUS
這是我所期望的指數。
但是,當使用OR
時,查詢使用CHILD
上的自然計劃和PARENT.ID
上的主鍵索引。
發生同樣,如果我申請查詢僅父表:
SELECT P.* FROM PARENT P WHERE (P.DATE > '01.01.2015' OR (P.STATUS <> 1 AND P.STATUS <> 9));
有沒有辦法來優化這樣的查詢使用比天然計劃好?
你能否在這裏更新兩個計劃:http://www.brentozar.com/pastetheplan/ ..此外,表格數量, – TheGameiswar
這兩個表上的索引請標記您正在使用的數據庫。 –
請編輯您的問題,爲所討論的表(包括所有索引)和執行計劃添加'create table'語句。 [_Formatted_](http://stackoverflow.com/help/formatting)**文本**請[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload圖像-的代碼上那麼當-要價-A-問題/ 285557#285557) –