MySQL: Kiểm soát Trình tối ưu hóa Truy vấn để chọn Kế hoạch Thực thi Tốt nhất

2022-03-20 14:48:02

Trong bài đăng này, tôi đang chia sẻ hai tham số quan trọng có thể hữu ích để cải thiện quá trình thực thi truy vấn trong MySQL Server.

Trình tối ưu hoá Truy vấn đang đóng vai trò chính trong Quy trình Thực thi Truy vấn. Có trách nhiệm chọn Kế hoạch thực thi truy vấn tốt nhất trong danh sách các Kế hoạch.
Trong MySQL, chúng ta có thể kiểm soát nhiệm vụ của Trình tối ưu hóa truy vấn bằng cách đặt một vài tham số.

Tại sao bởi vì?

Nếu bạn có một Truy vấn SQL lớn (bao gồm khoảng 40 bảng), Công cụ lập kế hoạch chủ yếu tạo ra tất cả các kế hoạch có thể có.

Chúng ta nên điều chỉnh tình huống này bằng cách biết về các thông số Optimizer_prune_level và Optimizer_search_depth.

Optimizer_prune_level: Mặc định là BẬT, nó yêu cầu Trình tối ưu hóa truy vấn bỏ qua các kế hoạch nhất định dựa trên số lượng hàng ước tính.

Nếu chúng tôi có tổng cộng 40 bảng, Công cụ lập kế hoạch tạo tất cả hơn 40 kế hoạch có thể có bao gồm cả sơ đồ bảng riêng lẻ có thể không cần thiết cho Trình tối ưu hóa truy vấn.

If you believe that the optimizer missed a better query plan, this option can be switched off (Optimizer_prune_level=0) with the risk that query compilation may take much longer.
Biến này chúng ta có thể đặt cả cấp độ TOÀN CẦU và phiên.

Optimizer_search_depth: Giá trị mặc định là 62, Công cụ lập kế hoạch đang tạo nhiều kế hoạch, nhưng đôi khi Công cụ lập kế hoạch cũng tạo ra một kế hoạch chưa hoàn chỉnh.

When Query Optimizer starts to scan the plan, we can set Optimizer_search_depth value to tell how far each incomplete plan the optimizer should look to evaluate.

Nếu chúng tôi đặt giá trị cao hơn (Tối đa 63), Trình tối ưu hóa Truy vấn sẽ cố gắng đánh giá tất cả các kế hoạch chưa hoàn thành sẽ mất nhiều thời gian hơn để thực hiện. Nếu chúng tôi đặt giá trị thấp hơn, Trình tối ưu hóa Truy vấn có thể bỏ qua một số kế hoạch được tạo chưa hoàn chỉnh.

Biến này chúng ta có thể đặt cả cấp độ TOÀN CẦU và phiên.

Xem thêm:


Chia sẻ: