Mẹo tối ưu MySQL WooCommerce cho website WordPress
Có nhiều vấn đề về hiệu suất khi làm việc với plugin WooCommerce trên các website WordPress. Ngay từ việc sử dụng thêm các plugin phụ trợ, không phải plugin nào cũng có những lập trình viên tốt và hiểu được cách tăng hiệu suất khi thêm/bớt code.
Vấn đề chính
Cấu trúc của WordPress khi sử dụng với hàng nghìn sản phẩm hay bài viết phụ thuộc vào khả năng đọc các table wp_postmeta
và wp_options
. Hầu hết các query nặng sẽ rơi vào cách đọc và đếm các table này.
Hãy thử phân tích. Với table wp_postmeta
, cột dữ liệu meta_value
được định nghĩa là longtext
, nên khó có khả năng index như bình thường, đặc biệt là khi số dòng quá lớn. Mỗi một sản phẩm hay bài viết có thể là 1 id nhưng chứa hàng chục dòng trên table này.
Cách xử lý
Để tối ưu MySQL WooCommerce, bạn sẽ cần quan tâm tới số lượng bao nhiêu thì website có tốc độ chậm. Thường thì từ 2000 sản phẩm hoặc 1000 sản phẩm nhưng nhiều biến thể, tốc độ backend bên trong admin đã chậm đáng kể.
Qua thử nghiệm, mình nhận thấy tạo index theo dạng prefix cho một số lượng kí tự nhất định của cột meta_value
có thể là phương án đơn giản đầu tiên có thể áp dụng. Tại sao? Vì phần nhiều dữ liệu nằm trong table này không phải là các giá trị quá khó đoán, chẳng hạn như:
- yes
- no
- 0
- 1
- true
- false
- số nhỏ hơn 100
Để mang lại xác suất tốt hơn, ta có thể lấy ra 6-8 kí tự đầu tiên để index dạng prefix này. Một số thí nghiệm cho thấy kết quả khi truy cập vào các trang sản phẩm và danh mục sản phẩm đã có thể giảm tầm 25% độ trễ.
Vui lòng cân nhắc trước khi sử dụng câu lệnh MySQL này. Hãy sao lưu trước khi tiến hành. Tốt nhất, hãy để các lập trình viên chuyên nghiệp thực hiện kiểm tra và sử dụng câu lệnh.
Câu lệnh để thực hiện điều này trên database MySQL/MariaDB như sau:
ALTER TABLE `wp_postmeta` ADD INDEX( `meta_key`(50), `meta_value`(6));
Tuỳ theo nhu cầu, có thể trên database của bạn sẽ cần nhiều hơn (6), chẳng hạn tới 30 kí tự để index và cho hiệu suất cải thiện hơn.
Bạn có thể cài đặt plugin Query Monitor để kiểm tra thời gian tải query sau khi set index.
Với table wp_options
bạn cũng có thể áp dụng tương tự với logic trên. Câu lệnh tham khảo:
ALTER TABLE `wp_options` ADD INDEX( `option_name`, `option_value`(10));
Chúc bạn tối ưu MySQL WooCommerce thành công với 2 câu lệnh trên.