我有一個簡單的查詢,該查詢選擇由其他索引列過濾的列之一排序的前200行。混亂就是爲什麼在PL/SQL Developer中的查詢計劃表明,該指數是用來僅當我選擇的所有行,如:選擇頂部行時使用了錯誤的索引
SELECT * FROM
(
SELECT *
FROM cr_proposalsearch ps
WHERE UPPER(ps.customerpostcode) like 'MK3%'
ORDER BY ps.ProposalNumber DESC
)
WHERE ROWNUM <= 200
計劃表明,它採用指數CR_PROPOSALSEARCH_I1,這是兩列的索引:PROPOSALNUMBER & UPPER(CUSTOMERNAME),這需要0.985s執行:
如果我擺脫ROWNUM條件,該計劃是什麼,我希望它在0.343s執行:
凡index XIF25CR_PROPOSALSEARCH is on CR_PROPOSALSEARCH (UPPER(CUSTOMERPOSTCODE));
怎麼來的?
編輯:我收集了關於cr_proposalsearch
表的統計信息,現在兩個查詢計劃都顯示它們使用XIF25CR_PROPOSALSEARCH
索引。
兩個不同的查詢,兩個不同的結果集,爲什麼不應該有兩個不同的解釋計劃? – APC