Tôi đang làm việc với một oracle DB cố gắng điều chỉnh một số truy vấn và tôi không hiểu tại sao làm việc một mệnh đề cụ thể theo một cách cụ thể có tác động mạnh đến hiệu suất truy vấn. Dưới đây là một phiên bản performant của truy vấn tôi đang làmTại sao các truy vấn dường như tương tự này lại có thời gian chạy khác nhau đáng kể?
select * from
(
select a.*, rownum rn from
(
select *
from table_foo
) a where rownum <= 3
) where rn >= 2
Truy vấn tương tự bằng cách thay thế hai dòng cuối cùng với điều này
) a where rownum >=2 rownum <= 3
)
Thực hiện khủng khiếp. Một số đơn đặt hàng có cường độ kém hơn
) a where rownum between 2 and 3
)
cũng hoạt động khủng khiếp. Tôi không hiểu phép thuật từ truy vấn đầu tiên và cách áp dụng nó cho các truy vấn tương tự khác.
Bạn có thể chạy phân tích truy vấn ('EXPLAIN PLAIN', http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm) để xem cách DBMS chạy truy vấn. – outis
Như một lưu ý phụ, tại sao 'select *' khi bạn có thể đơn giản 'select * từ (chọn a. *, Rownum rn từ table_foo a nơi rownum <= 3) trong đó rn> = 2'? –