Lợi ích của việc chạy Truy vấn BẢNG TỐI ƯU trong Máy chủ DB DB


9

Tôi muốn biết những lợi ích [thực sự thiết thực] có thể được gặt hái bằng cách chạy OPTIMIZE TABLE tbl_nametruy vấn trong Máy chủ MySQL.

Tôi đã kiểm tra điều này một lần và thấy rằng sau khi chạy xong, lần truy cập DB tiếp theo mất nhiều thời gian có thể là do việc di chuyển các đoạn hoặc do đó, nhưng các lần truy cập tiếp theo cho thấy hiệu suất, tôi không chắc liệu bộ nhớ đệm truy vấn có thực hiện thủ thuật này không với tối ưu hóa hoặc tối ưu hóa một mình làm thủ thuật này.

Có ai có thể hướng dẫn tôi một số giá trị chênh lệch hiệu suất thực sự nếu có thể để tôi có thể tiến xa hơn khi làm việc với MySQL đang thu hút sự chú ý trong dự án của chúng tôi.

Câu trả lời:


7

Xin lưu ý rằng BẢNG TỐI ƯU không thực hiện phân mảnh. Trong nội bộ, BẢNG TỐI ƯU thực hiện một số thao tác (sao chép dữ liệu vào tệp tạm thời, tạo lại chỉ mục, tính toán lại thống kê chỉ mục). Trong thực tế, ví dụ tôi có thể được thực hiện thủ công như được hiển thị.

Ví dụ: Nếu bạn tối ưu hóa mydb.mytable, bạn nhập lệnh này:

OPTIMIZE TABLE mydb.mytable;

Lưu ý rằng mysql thực hiện một số thứ sau đây:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

Điều này khá hữu ích cho các bảng có khối lượng CẬP NHẬT và XÓA nhiều

Thực hiện điều này có thể thực hiện hai điều

  1. Ngăn chặn mysql xem qua các đoạn trong bảng trong nỗ lực tải dữ liệu vào các đoạn có kích thước phù hợp. Loại bỏ những mảnh vỡ này sẽ làm giảm hoạt động này.

  2. Việc thống kê chỉ mục được tính toán lại giúp Trình tối ưu hóa truy vấn MySQL xây dựng các kế hoạch GIẢI THÍCH tốt hơn. Mặt khác, các truy vấn có thể xấu đi trong thời gian thực hiện vì Trình tối ưu hóa truy vấn MySQL đã quyết định đưa ra những dự đoán xấu trong kế hoạch GIẢI THÍCH. Đây sẽ là một triệu chứng rõ ràng của một bảng có khối lượng CẬP NHẬT và XÓA cao.

CAUPAT

Liên quan đến bộ nhớ đệm, bộ nhớ đệm mất một cách nhanh chóng vì thực hiện quét toàn bộ bảng. Đối với các trang chỉ mục MyISAM chảy vào và ra khỏi Bộ đệm chính MyISAM. Đối với InnoDB, các trang dữ liệu và chỉ mục chảy vào và ra khỏi Bộ đệm InnoDB.


Cảm ơn vì đã trả lời. Từ quan điểm của bạn, tôi hiểu rằng tôi nên sử dụng một số dịch vụ như công việc định kỳ để lên lịch tối ưu hóa cho một trong những bảng được cập nhật thường xuyên của mình để tôi có thể đạt được hiệu suất tốt hơn. Hơn nữa, tôi đang sử dụng InnoDB cho bảng này. Đây có phải là một lựa chọn tốt hơn. Ngoài ra, tôi thấy HASH tham gia vào SQL Server được đề xuất để cải thiện hiệu năng truy vấn, bạn có thể giải thích điều này cho tôi và làm thế nào để có được một cái tương tự như thế này trong MySQL. Ngoài ra, vui lòng cho tôi trình tối ưu hóa Truy vấn SQL cho MySQL [phiên bản Windows7].
Saravanan

@savaranan: Trình tối ưu hóa truy vấn MySQL mà tôi đang đề cập đến là trình nội bộ được tích hợp trong MySQL. BTW Vì bảng bạn muốn tối ưu hóa là InnoDB, bạn có thể bỏ qua các bước DISABLE KEYS và ENABLE KEYS. Ngoài ra, BẢNG ANALYZE có thể được bỏ qua vì nó hoàn toàn vô dụng trên các bảng InnoDB vì InnoDB tính toán lại các số lượng bảng của nó bằng cách xấp xỉ bằng cách sử dụng các trang từ các chỉ mục BTREE, được gọi là chỉ mục lặn.
RolandoMySQLDBA

@savaranan: Theo như các chỉ mục HASH, InnoDB có các chỉ mục băm thích ứng ( dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html ). Ngoài ra còn có các đề xuất hay về việc mô phỏng các chỉ mục băm của riêng bạn và xử lý các va chạm dựa trên các trang 103-106 của "MySQL hiệu suất cao" ( amazon.com/dp/0596101716 )
RolandoMyQueryDBA
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.