Cấu hình MySQL trên truy vấn Tạo tạo Chỉ mục Sắp xếp bằng cách sử dụng 75% tổng thời gian


10

Chúng tôi đang cố gắng tìm cách tối ưu hóa một truy vấn (mất khoảng 100ms) và chạy hồ sơ mà chúng tôi thấy Creating Sort Indexbằng cách sử dụng 75%tổng thời gian. Đầu tiên, những gì chính xác hiệu ứng tạo ra chỉ số sắp xếp? Có phải đĩa / io không?

Thứ hai, có bất kỳ tối ưu hóa nào chúng ta có thể thực hiện cho chính truy vấn không?

SELECT r.`id`, 
       r.name, 
       r.public_uri, 
       rv.version, 
       rv.interpreter, 
       rv.notes, 
       rv.content, 
       r.added, 
       r.added_by, 
       r.modified, 
       r.modified_by, 
       r.public, 
       r.public_by
  FROM recipe_heads rh, 
       recipes r, 
       recipe_versions rv
 WHERE rh.recipe = r.`id` 
   AND rh.recipe_version = rv.`id` 
   AND r.`id` = rv.recipe
ORDER BY r.added DESC

Giải thích: Ảnh chụp màn hình

Câu trả lời:


6

Chúng tôi đã có vấn đề tương tự cho các truy vấn lớn. Thông thường các truy vấn chạy trong nhiều giờ (tối đa 7-8) tùy thuộc vào tải trên DB cho các hàng 400M. Tuy nhiên, mục tiêu của chúng tôi là đạt được kết quả nhóm, chẳng hạn như chọn col1, col2, col3, đếm (1), đếm (col4 khác biệt) từ nhóm bảng bằng 1,2,3.

Vấn đề cơ bản cũng giống như của bạn, như trong cả hai trường hợp DB sắp xếp (đơn đặt hàng) kết quả bên trong.

  • Cách tạo chỉ mục sắp xếp hoạt động. Trên trang web mysql có thông báo "Chuỗi đang xử lý một CHỌN được giải quyết bằng bảng tạm thời nội bộ." Theo hiểu biết thuật toán của tôi, hệ thống rất có thể chia dữ liệu thành các khối, đọc từng đĩa một, sắp xếp từng khối riêng lẻ, đưa trở lại vào một số không gian đĩa tạm thời, v.v. Hệ thống thực hiện điều này cho tất cả các khối và cuối cùng thực hiện sắp xếp hợp nhất. Điều này liên quan đến đọc / viết rộng rãi.

Một giải pháp khả thi có thể là tăng bộ nhớ cho DB (để nó có thể tạo ra các khối lớn hơn có thể lưu lại trong bộ nhớ) hoặc nếu bạn có bộ nhớ lớn hơn ở nơi khác, bạn có thể lập trình giải pháp bằng cách truyền phát từ DB. Điều này có thể đạt được trong thời gian nlogn.

Về mặt lập trình, tôi có thể giảm thời gian từ trung bình 2 giờ xuống còn 7,5 phút.


4

'Tạo chỉ mục sắp xếp' là cơ sở dữ liệu tìm ra thứ tự các giá trị được trả về của bạn dựa trên mệnh đề 'order by' của bạn. Bộ hạn chế chính ở đây sẽ có sẵn tốc độ CPU / CPU và băng thông bộ nhớ. Việc sắp xếp sẽ không được thực hiện cho đến khi dữ liệu đã có sẵn trong bộ nhớ, ít nhất là cho một truy vấn nhỏ này. Nếu bạn lập hồ sơ truy vấn, bạn có thấy bất kỳ sự chờ đợi nào cho bất kỳ tài nguyên nào không?

Để làm cho truy vấn này nhanh hơn, bạn có thể xem xét thêm một chỉ mục trên 'r.added', vì nó không giống như có một chỉ số theo giải thích của bạn.


Bí quyết addedthực sự có một chỉ số tiêu chuẩn.
Justin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.