Tôi đã có một bảng SQL với một số triệu mục và tôi đã cố truy vấn số lượng mục nhập cũ hơn 60 ngày (Oracle 11.2. 0.1.0).Tại sao truy vấn có chi phí chọn phụ ít hơn truy vấn có hằng số trong Oracle
Đối với thí nghiệm này tôi đã sử dụng 3 phiên bản khác nhau của select-tuyên bố:
(Chi phí có giá trị được đưa ra bởi cóc cho Oracle V. 9.7.2.5)
select count(*) from fman_file
where dateadded >= (select sysdate - 60 from dual)
Chi phí: 65select count(*) from fman_file
where dateadded >= sysdate - 60
Chi phí: 1909select count(*) from fman_file
where dateadded >= sysdate - numtodsinterval(60,'day')
Chi phí: 1884select count(*) from fman_file where dateadded >= '10.10.2009'
Chi phí: 1823
(The 2009/10/10 chỉ là một ví dụ cập nhật !!!)
Tôi không có thời gian chính xác -giá trị cho tất cả các truy vấn trong đầu, nhưng đầu tiên thực sự là nhanh nhất. Vì vậy, tôi đã thử thêm một số truy vấn chọn lọc với các lựa chọn khác (như (Chọn 1000 từ kép)) và chúng (đôi khi WAY) nhanh hơn các giá trị khác có giá trị không đổi. Nó thậm chí có vẻ rằng điều này "WHATEVER" (Bug/Feature) đang xảy ra trong MySQL quá.
Vì vậy, bất kỳ ai cũng có thể cho tôi biết tại sao truy vấn đầu tiên nhanh hơn các truy vấn khác?
Greetz
P.S .: Đây không phải là về sydate! Câu hỏi đặt ra là TẠI SAO LÀ B VARNG CỨU VỚI (CHỌN) NHANH CHÓNG NHỮNG NGƯỜI KHÁC? (với một chút tập trung vào Chọn biến thể (1.) so với biến thể không đổi (4.))
không thể cho bạn biết tại sao, nhưng nếu bạn đang cố gắng để xác định số lượng hồ sơ OLDER hơn 60 ngày, không phải là nhà điều hành quan hệ của bạn đảo ngược? – DCookie
Tôi có thể tái tạo hiệu ứng này cũng trên 10.2.0.2.0, nhưng sự khác biệt nhỏ hơn nhiều: 4723 với chọn lựa, 4736 với so sánh đơn giản. –
Chi phí "thấp hơn" không nhất thiết có nghĩa là "nhanh hơn". Mặc dù nó có thể có một số giá trị trong một truy vấn rất đơn giản như của bạn, thông thường bạn không thể so sánh các giá trị chi phí từ một truy vấn này với truy vấn khác. Mục đích của họ là so sánh các kế hoạch * khác nhau * cho cùng một truy vấn. –