他のインデックス付き列でフィルタリングされた列の上位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を、使用することを示しています2列のインデックス:
を私はROWNUM条件を取り除く場合は、計画は私が期待するものであり、それは0.343sで実行されます。PROPOSALNUMBER & UPPER(CUSTOMERNAME)、これは実行する0.985sを取ります:
index XIF25CR_PROPOSALSEARCH is on CR_PROPOSALSEARCH (UPPER(CUSTOMERPOSTCODE));
がどのように来ますか?
EDIT:私はcr_proposalsearch
表の統計を収集しており、両方のクエリプランは、今、彼らはXIF25CR_PROPOSALSEARCH
インデックスを使用することを示しています。
2つの異なるクエリ、2つの異なる結果セット、2つの異なる説明計画が存在しない理由は何ですか? – APC