Truy vấn SQL chậm có thể ảnh hưởng đến hiệu suất hệ thống. Hãy cùng khám phá những quy tắc đơn giản giúp tối ưu hóa SQL và cải thiện tốc độ truy xuất dữ liệu một cách đáng kể.
1. Đánh Index Đúng Cách
- Tại sao cần Index? Index giúp truy vấn dữ liệu nhanh hơn bằng cách giảm số lượng hàng cần quét trong bảng.
- Khi nào nên Index?
- Các cột trong WHERE, ORDER BY, GROUP BY.
- Các cột có nhiều giá trị duy nhất.
Ví dụ:
CREATE INDEX idx_customer_id ON customers (customer_id);
SELECT customer_id, customer_name
FROM customers
WHERE customer_id = '1';
2. Sử dụng UNION Để Thay Thế OR
Khi sử dụng nhiều điều kiện OR, hiệu suất có thể bị ảnh hưởng do việc quét toàn bộ bảng.
Thay vì:
SELECT *
FROM students
WHERE first_name LIKE 'A%'
OR last_name LIKE 'B%';
Dùng UNION:
SELECT *
FROM students
WHERE first_name LIKE 'A%'
UNION ALL
SELECT *
FROM students
WHERE last_name LIKE 'B%';
3. Tránh LIKE Với % Ở Phía Trước
Câu lệnh LIKE '%keyword' thường không sử dụng được index.
- Giải pháp:
- Tránh % ở đầu.
- Sử dụng Full-text Search nếu cần tìm kiếm linh hoạt hơn.
4. Tận Dụng MySQL Full-Text Search
Full-text index tăng tốc tìm kiếm cho các cột văn bản lớn.
Ví dụ:
ALTER TABLE students ADD FULLTEXT (first_name, last_name);
SELECT *
FROM students
WHERE MATCH(first_name, last_name) AGAINST('A');
5. Không Sử Dụng Hàm Trên Cột Đã Đánh Index
Hàm như YEAR(finished_at) sẽ làm mất hiệu quả index.
Thay vì:
SELECT COUNT(*)
FROM orders
WHERE YEAR(finished_at) = '2018';
Sử dụng:
SELECT COUNT(*)
FROM orders
WHERE finished_at >= '2018-01-01'
AND finished_at < '2019-01-01';
6. Tối Ưu Hóa Database Schema
- Chọn kiểu dữ liệu phù hợp:
- Dùng TINYINT thay vì INT nếu giá trị nhỏ.
- Sử dụng kiểu số thay vì chuỗi nếu có thể.
- Tránh NULL:
- NULL làm tăng độ phức tạp khi xử lý dữ liệu.
- Sử dụng giá trị mặc định thay cho NULL.
7. Sử Dụng MySQL Query Caching
Query caching tăng tốc độ đọc khi hệ thống chạy nhiều truy vấn giống nhau.
Kiểm tra Cache:
SHOW VARIABLES LIKE 'have_query_cache';
Cấu hình Cache: Trong file config MySQL (/etc/mysql/my.cnf):
query_cache_type = 1
query_cache_size = 16M
8. Các Kỹ Thuật Khác
- Chỉ SELECT các cột cần thiết: Tránh SELECT *, chỉ lấy dữ liệu cần dùng.
- Ưu tiên INNER JOIN: INNER JOIN thường nhanh hơn OUTER JOIN.
- Giảm sử dụng DISTINCT và UNION: Chỉ dùng khi thật sự cần thiết.
Bài viết chia sẻ các quy tắc tối ưu hóa truy vấn SQL như sử dụng index, thay thế OR
bằng UNION
, tránh dùng LIKE '%'
, tận dụng FULLTEXT SEARCH
, tránh hàm trên cột index, chọn kiểu dữ liệu phù hợp và sử dụng query caching để tăng hiệu suất.
Hy vọng bài viết này giúp ích cho bạn trong quá trình phát triển ứng dụng! Sucodev Community luôn sẵn sàng đồng hành cùng bạn!
Fanpage: https://www.facebook.com/Sucodev.Community
Group Zalo: https://zalo.me/g/bxdjch748





