Ồ! Đó là cách "hợp nhất chỉ mục" phức tạp nhất mà tôi từng thấy.
Thông thường (có lẽ luôn luôn ), bạn có thể tạo chỉ mục 'tổng hợp' để thay thế chỉ mục-hợp nhất-giao nhau, và hoạt động tốt hơn . Thay đổi key2
chỉ từ (pinned)
thành (pinned, DeviceId)
. Điều này có thể thoát khỏi 'giao lộ' và tăng tốc độ.
Nói chung, Trình tối ưu hóa chỉ sử dụng hợp nhất chỉ mục trong lúc tuyệt vọng. (Tôi nghĩ đây là câu trả lời cho câu hỏi tiêu đề.) Bất kỳ thay đổi nhỏ nào đối với truy vấn hoặc các giá trị có liên quan và Trình tối ưu hóa sẽ thực hiện truy vấn mà không có hợp nhất chỉ mục.
Một cải tiến trên bảng tạm thời __codes
là tạo một bảng cố định với một phạm vi giá trị lớn, sau đó sử dụng một loạt giá trị từ bảng đó bên trong Proc của bạn. Nếu bạn đang sử dụng MariaDB, thì hãy sử dụng bảng "trình tự" được tạo động. Ví dụ:'bảng' seq_1_to_100
là hiệu quả một bảng một cột với các số 1..100. Không cần khai báo hoặc điền vào.
Bạn có thể loại bỏ REPEAT
khác vòng lặp bằng điện toán thời gian từ Code
.
Tránh LOOPs
sẽ là lợi ích hiệu suất lớn nhất.
Hãy hoàn thành tất cả những điều đó, sau đó tôi có thể có những mẹo khác.