Tôi có một truy vấn đơn giản, chọn 200 hàng đầu được sắp xếp theo một trong các cột được lọc bởi cột được lập chỉ mục khác. Sự rắc rối là tại sao là kế hoạch truy vấn trong PL/SQL Developer cho thấy chỉ số này được sử dụng chỉ khi tôi chọn tất cả các hàng, ví dụ:Chỉ mục sai được sử dụng khi chọn các hàng trên cùng
SELECT * FROM
(
SELECT *
FROM cr_proposalsearch ps
WHERE UPPER(ps.customerpostcode) like 'MK3%'
ORDER BY ps.ProposalNumber DESC
)
WHERE ROWNUM <= 200
Kế hoạch cho thấy rằng nó sử dụng chỉ số CR_PROPOSALSEARCH_I1, đó là một chỉ mục trên hai cột: PROPOSALNUMBER & UPPER (CUSTOMERNAME), điều này có 0.985s để thực hiện:
Nếu tôi thoát khỏi tình trạng ROWNUM, kế hoạch là những gì tôi mong đợi và nó thực thi trong 0.343s :
đâu index XIF25CR_PROPOSALSEARCH is on CR_PROPOSALSEARCH (UPPER(CUSTOMERPOSTCODE));
Tại sao?
EDIT: Tôi đã thu thập số liệu thống kê trên cr_proposalsearch
bảng và cả hai kế hoạch truy vấn giờ đây cho thấy rằng chúng sử dụng chỉ mục XIF25CR_PROPOSALSEARCH
.
Hai truy vấn khác nhau, hai tập hợp kết quả khác nhau, tại sao không nên có hai kế hoạch giải thích khác nhau? – APC