Thủ thuật tối ưu MySQL: Tăng hiệu suất và tốc độ

Chỉ định các trường cần thiết trong truy vấn SELECT

Thay vì chọn tất cả các trường trong truy vấn SELECT, chỉ chọn những trường cần thiết để giảm tải và tăng tốc độ truy vấn.

Ví dụ, nếu bạn chỉ quan tâm đến tên và địa chỉ của khách hàng, hãy thay thế câu truy vấn:

SELECT * FROM customers;

bằng

SELECT name, address FROM customers;

 

Tạo các chỉ mục (indexes)

Chỉ mục (index) giúp MySQL tìm kiếm và truy xuất dữ liệu nhanh hơn. Xác định các trường thường được sử dụng trong truy vấn WHERE, JOIN hoặc ORDER BY và tạo chỉ mục cho chúng.

Ví dụ, trong bảng "orders" có trường "customer_id" thường được sử dụng trong truy vấn WHERE hoặc JOIN, bạn có thể tạo chỉ mục như sau:

CREATE INDEX idx_customer_id ON orders (customer_id);

 

Sử dụng các loại chỉ mục phù hợp

MySQL cung cấp nhiều loại chỉ mục như B-tree, hash và full-text. Chọn loại chỉ mục phù hợp với yêu cầu truy vấn của bạn để đảm bảo hiệu suất tốt nhất.

Ví dụ, nếu bạn cần tìm kiếm văn bản trong một trường dữ liệu, bạn có thể tạo một chỉ mục full-text như sau:

CREATE FULLTEXT INDEX idx_description ON products (description);

 

Tối ưu hóa truy vấn

Sử dụng EXPLAIN để xem kế hoạch truy vấn và phân tích cách MySQL thực hiện nó. Điều này giúp bạn xác định các vấn đề hiệu suất và tối ưu hóa truy vấn bằng cách sử dụng các chỉ mục hoặc viết lại truy vấn.

Ví dụ, để xem kế hoạch truy vấn của một câu truy vấn SELECT, hãy chạy lệnh sau:

EXPLAIN SELECT * FROM orders WHERE customer_id = 123;

 

Giới hạn số lượng kết quả trả về

Khi truy vấn trả về một số lượng lớn kết quả, hạn chế số lượng kết quả trả về bằng cách sử dụng LIMIT. Điều này giúp giảm tải và tăng tốc độ truy vấn.

Ví dụ, để chỉ trả về 10 kết quả từ bảng "products", bạn có thể sử dụng câu truy vấn sau:

SELECT * FROM products LIMIT 10;

 

Sử dụng kết hợp INNER JOIN thay vì JOIN

INNER JOIN có hiệu suất tốt hơn JOIN thông thường. Hãy sử dụng INNER JOIN khi bạn chỉ quan tâm đến các bản ghi có sự khớp trong cả hai bảng.

Ví dụ, để kết hợp bảng "orders" và "customers" dựa trên trường "customer_id", bạn có thể sử dụng câu truy vấn sau:

SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;

 

Sử dụng tạm ổ đĩa (temporary table) một cách cẩn thận

Tạm ổ đĩa có thể được sử dụng trong một số trường hợp, nhưng chúng cần được sử dụng một cách cẩn thận vì có thể làm chậm truy vấn. Hãy xem xét xem có thể tối ưu hóa truy vấn để tránh sử dụng tạm ổ đĩa.

Ví dụ, thay vì sử dụng tạm ổ đĩa trong truy vấn sau:

CREATE TEMPORARY TABLE temp_table SELECT * FROM products;

bạn có thể thử tối ưu truy vấn để trực tiếp truy vấn dữ liệu từ bảng gốc.

 

Cấu hình MySQL tốt

Xem xét cấu hình lại MySQL để tận dụng tối đa tài nguyên hệ thống và phù hợp với yêu cầu của ứng dụng. Điều này bao gồm cấu hình bộ nhớ, kích thước bộ đệm, số lượng kết nối và các tham số khác. Hãy tham khảo tài liệu MySQL và tìm hiểu cách điều chỉnh cấu hình phù hợp với môi trường của bạn.

 

Xóa dữ liệu không cần thiết

Xóa dữ liệu không cần thiết hoặc sao lưu dữ liệu cũ để giảm kích thước cơ sở dữ liệu và tăng tốc độ truy vấn.

Ví dụ, nếu bạn có bảng "logs" lưu trữ các bản ghi log cũ, bạn có thể xóa các bản ghi cũ hơn một năm như sau:

DELETE FROM logs WHERE created_at < '2022-01-01';

 

Sử dụng bộ nhớ cache

Cấu hình bộ nhớ cache MySQL để lưu trữ các truy vấn thường xuyên và dữ liệu đã truy xuất gần đây. Điều này giúp giảm thời gian truy cập đĩa và tăng tốc độ truy vấn.

Ví dụ, để cấu hình bộ nhớ cache với kích thước 1GB, bạn có thể sửa đổi tệp cấu hình "my.cnf" của MySQL như sau:

[mysqld]
...
query_cache_type = 1
query_cache_size = 1G

 

Lưu ý rằng các ví dụ trên chỉ mang tính chất minh họa và cần được điều chỉnh phù hợp với cấu trúc và yêu cầu của cơ sở dữ liệu thực tế. Cẩn thận kiểm tra và đánh giá hiệu quả trước và sau khi áp dụng các thủ thuật tối ưu này để đảm bảo rằng chúng thích hợp với môi trường cụ thể của bạn.