Tôi cũng giả sử bạn đang sử dụng Oracle. Và tôi cũng khuyên bạn nên kiểm tra trang web của kế hoạch giải thích, để bắt đầu. Có rất nhiều để tối ưu hóa, nhưng nó có thể được học.
Một vài lời khuyên làm theo:
Đầu tiên, khi nhiệm vụ ai đó bạn tối ưu hóa, họ hầu như luôn luôn tìm kiếm hiệu quả chấp nhận được chứ không phải là hoạt động cuối cùng. Nếu bạn có thể giảm thời gian chạy của truy vấn từ 3 phút xuống còn 3 giây, đừng đổ mồ hôi giảm xuống còn 2 giây, cho đến khi bạn được yêu cầu.
Thứ hai, thực hiện kiểm tra nhanh để đảm bảo các truy vấn bạn đang tối ưu hóa là chính xác về mặt logic. Nghe có vẻ ngớ ngẩn, nhưng tôi không thể nói với bạn số lần tôi được yêu cầu tư vấn về truy vấn chạy chậm, chỉ để biết rằng thỉnh thoảng nó đưa ra câu trả lời sai! Và khi nó quay ra, gỡ lỗi truy vấn thường bật ra để tăng tốc độ nó lên là tốt.
Cụ thể, tìm cụm từ "Tham gia Descartes" trong kế hoạch giải thích. Nếu bạn nhìn thấy nó ở đó, cơ hội là rất tốt mà bạn đã tìm thấy một tham gia cartesian không chủ ý. Các mẫu thông thường cho một tham gia cartesian không chủ ý là mệnh đề FROM liệt kê các bảng được phân tách bằng dấu phẩy và các điều kiện kết nối nằm trong mệnh đề WHERE. Ngoại trừ một trong những điều kiện tham gia bị thiếu, vì vậy mà Oracle không có sự lựa chọn nào khác ngoài việc thực hiện một tham gia Descartes. Với các bảng lớn, đây là một thảm họa hiệu suất.
Có thể thấy một Descartes Tham gia trong kế hoạch giải thích hợp truy vấn là một cách logic đúng, nhưng tôi liên kết này với phiên bản cũ của Oracle.
Cũng tìm chỉ mục hợp chất chưa sử dụng. Nếu cột đầu tiên của một chỉ mục hợp chất không được sử dụng trong truy vấn, Oracle có thể sử dụng chỉ mục không hiệu quả hoặc hoàn toàn không. Hãy để tôi đưa ra một ví dụ:
Truy vấn là:
select * from customers
where
State = @State
and ZipCode = @ZipCode
(DBMS không Oracle, vì vậy cú pháp là khác nhau, và tôi đã quên cú pháp gốc).
Xem nhanh chỉ mục cho biết chỉ mục trên Khách hàng có các cột (Quốc gia, Tiểu bang, Mã zip) theo thứ tự đó. Tôi đã thay đổi truy vấn để đọc
select * from customers
where Country = @Country
and State = @State
and ZipCode = @ZipCode
và bây giờ nó chạy trong khoảng 6 giây thay vì khoảng 6 phút, bởi vì trình tối ưu hóa có thể sử dụng chỉ mục để thuận lợi. Tôi hỏi các lập trình viên ứng dụng tại sao họ đã bỏ qua quốc gia khỏi tiêu chí, và đây là câu trả lời của họ: họ biết rằng tất cả các địa chỉ đều có quốc gia tương đương với 'USA' để họ đoán họ có thể tăng tốc truy vấn bằng cách bỏ tiêu chí đó ra!
Thật không may, tối ưu hóa việc truy xuất cơ sở dữ liệu không thực sự giống như cạo micro giây ra khỏi thời gian tính toán. Nó liên quan đến việc hiểu thiết kế cơ sở dữ liệu, đặc biệt là các chỉ mục, và ít nhất là một tổng quan về cách trình tối ưu hóa thực hiện công việc của nó.
Bạn thường nhận được kết quả tốt hơn từ trình tối ưu hóa khi bạn học cách cộng tác với trình tối ưu hóa thay vì cố gắng vượt qua nó.
Chúc may mắn đến với tốc độ tối ưu hóa!
Tôi đánh giá cao sự trợ giúp của bạn và đặc biệt là các liên kết. Nó bắt đầu làm cho tôi kể từ bây giờ. Cảm ơn một lần nữa vì sự giúp đỡ. –
Tham gia không sử dụng các chỉ mục có thể xấu, chúng có thể là tuyệt đối tốt nhất.Tất cả phụ thuộc vào. không, không, không cố gắng loại bỏ tất cả các bảng quét toàn bộ với các chỉ mục. –