Tôi có một câu lệnh chạy trên máy chủ cơ sở dữ liệu Oracle. Tuyên bố có khoảng 5 lần tham gia và không có gì bất thường ở đó. Nó trông khá giống như dưới đây:Sử dụng gợi ý Oracle "FIRST_ROWS" để cải thiện hiệu suất cơ sở dữ liệu Oracle
SELECT field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
Vấn đề (và những gì là thú vị) là tuyên bố cho userid = 1 mất 1 giây để trở lại 590 hồ sơ. Báo cáo cho userid = 2 mất khoảng 30 giây để trả về 70 bản ghi.
Tôi không hiểu tại sao sự khác biệt quá lớn.
Dường như kế hoạch thực hiện khác nhau được chọn cho tuyên bố với userid = 1 và khác nhau cho userid = 2.
Sau khi tôi thực hiện Oracle Gợi ý FIRST_ROW, hiệu suất trở nên tốt hơn đáng kể. Cả hai câu lệnh (cho cả hai id 1 và 2) đều trả về dưới 1 giây.
SELECT /*+ FIRST_ROWS */
field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
Câu hỏi:
1) Những lý do có thể cho hiệu suất kém khi userid = 2 (khi gợi ý không được sử dụng)?
2) Tại sao kế hoạch thực hiện lại khác với kế hoạch thực hiện so với câu lệnh khác (khi gợi ý không được sử dụng)?
3) Có điều gì tôi nên cẩn thận khi quyết định thêm gợi ý này vào các truy vấn của tôi không?
Cảm ơn
Thống kê bảng của bạn có cập nhật và chính xác không? – Tebbe
hãy cẩn thận về bộ nhớ đệm khi chạy so sánh hiệu suất. – tbone
Tebbe - Thống kê được cập nhật. Họ có chính xác không, tôi không biết. – bobetko