Khi bạn đang tìm kiếm thông tin cụ thể của Oracle, tôi muốn giới thiệu blog Ask Tom tại Oracle. Nói chung, tôi nghĩ rằng bạn sẽ tìm thấy lời khuyên là không điều chỉnh truy vấn. Bạn sẽ nhận được lời khuyên tốt về cách viết truy vấn mà trình tối ưu hóa có thể tối ưu hóa. Tài liệu của Oracle cũng trực tuyến và tôi thường tìm thông tin cập nhật về Oracle. Tôi chưa làm việc với SQLServer vì vậy tôi không có bất kỳ đề xuất nào cho nó.
Tôi đã không thấy nhiều điều mới trong lĩnh vực tối ưu hóa các truy vấn trong vài năm qua. Sự thay đổi lớn là sự phản đối của trình tối ưu hóa dựa trên quy tắc, điều mà tôi hầu như không thể nhớ được khi làm việc với. Tuy nhiên, tôi hiểu SQLServer vẫn sử dụng trình tối ưu hóa dựa trên quy tắc, vì vậy việc hiểu các quy tắc của nó có thể giúp ích.
Một công cụ nơi bạn có thể chỉnh sửa một truy vấn, thực hiện nó và tạo một kế hoạch giải thích giúp hiểu được những thay đổi nào mang lại cho bạn một truy vấn hoạt động tốt. Tôi đã có kết quả tốt với AquaData Studio, và thực sự thích khung cảnh cây của nó. Nhà phát triển SQL cũng nên làm như vậy.
Như với bất kỳ tối ưu hóa nào, bạn cần có dữ liệu định lượng về hiệu suất của nó. Sau đó, bạn có thể xác định nếu bạn thực sự đã tối ưu hóa nó.
Cách tối ưu hóa truy vấn phụ thuộc một phần vào cách trình phân tích cú pháp xây dựng và tối ưu hóa truy vấn. Ở mức độ lớn hơn, nó phụ thuộc vào việc phân phối dữ liệu bạn đang truy vấn. Trong cơ sở dữ liệu Oracle nếu tập kết quả chiếm từ bốn phần trăm trở lên của bảng và được phân phối ngẫu nhiên, quét bảng thường nhanh hơn chỉ mục.
Tôi đã làm việc để tối ưu hóa các truy vấn cho một nhóm các nhà phát triển. Chỉ hai hoặc ba truy vấn một năm yêu cầu tối ưu hóa nghiêm trọng. Hầu hết các truy vấn đủ đơn giản để họ không cần tối ưu hóa. Phần còn lại thường có thể được xử lý bằng cách thêm các đường dẫn tham gia bị thiếu.
Đối với Oracle, có ba cài đặt có thể điều chỉnh có thể ảnh hưởng đáng kể đến hiệu suất. Chi phí cho việc tra cứu chỉ mục và dữ liệu tương tác để thay đổi các điều kiện theo đó một chỉ mục trong hoặc sẽ không được sử dụng. Hai cái này có thể được điều chỉnh trên cơ sở mỗi phiên. Mặc định thường không tối ưu. Giá trị khác kiểm soát số lượng thay thế mà trình tối ưu hóa sẽ thử. Tăng giá trị này thường giúp.
Tối ưu hóa bị ảnh hưởng đáng kể bởi phân phối dữ liệu và khối lượng. Khi tối ưu hóa, tốt nhất nên sử dụng một bản sao của cơ sở dữ liệu sản xuất hoặc ít nhất là một cơ sở dữ liệu có cùng phân phối dữ liệu và khối lượng. Tôi đã phá vỡ nghiêm trọng môi trường thử nghiệm, tối ưu hóa một truy vấn cho cơ sở dữ liệu đơn hàng sản xuất. Các cơ sở dữ liệu thử nghiệm và phát triển có phân phối dữ liệu khác nhau đáng kể khiến truy vấn không thành công ngay cả với dữ liệu ít hơn đáng kể.