·
10/3/2025
Một số quy tắc đơn giản tối ưu hóa Truy vấn SQL

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



26 người đọc