Bài 14: Tối ưu Full-Text Search
Full-Text Search (tìm kiếm toàn văn) là một công cụ mạnh mẽ trong SQL, cho phép tìm kiếm văn bản một cách linh hoạt và hiệu quả. Tuy nhiên, nếu không được tối ưu hóa, Full-Text Search có thể gây ra các vấn đề về hiệu suất, đặc biệt là khi làm việc với lượng dữ liệu lớn. Bài viết này sẽ đi sâu vào khái niệm Full-Text Search, cách triển khai, và các kỹ thuật tối ưu hóa để đạt được hiệu suất cao nhất.
14.1. Full-Text Search là gì?
Full-Text Search là một kỹ thuật cho phép tìm kiếm các từ hoặc cụm từ trong các cột văn bản (text) của cơ sở dữ liệu. Khác với tìm kiếm thông thường sử dụng LIKE
hoặc REGEXP
, Full-Text Search cung cấp khả năng tìm kiếm nhanh chóng và linh hoạt hơn.
14.1.1. Cách hoạt động của Full-Text Search
Indexing: Full-Text Search sử dụng một chỉ mục đặc biệt (Full-Text Index) để lưu trữ thông tin về các từ trong văn bản. Chỉ mục này cho phép tìm kiếm nhanh chóng các từ hoặc cụm từ.
Tokenization: Văn bản được chia nhỏ thành các từ (tokens) và lưu trữ trong chỉ mục. Quá trình này bao gồm việc loại bỏ các từ dừng (stopwords) và chuẩn hóa các từ (ví dụ: chuyển đổi thành chữ thường).
Searching: Khi thực hiện tìm kiếm, Full-Text Search sử dụng chỉ mục để tìm các từ hoặc cụm từ phù hợp với truy vấn.
14.1.2. So sánh với LIKE và REGEXP
LIKE: Tìm kiếm chính xác các chuỗi con trong văn bản. Không hỗ trợ tìm kiếm linh hoạt và không sử dụng chỉ mục.
- Ví dụ:
SELECT * FROM articles WHERE content LIKE '%database%';
- Ví dụ:
REGEXP: Tìm kiếm các chuỗi con dựa trên biểu thức chính quy. Linh hoạt hơn
LIKE
nhưng vẫn không sử dụng chỉ mục.- Ví dụ:
SELECT * FROM articles WHERE content REGEXP 'database|SQL';
- Ví dụ:
Full-Text Search: Hỗ trợ tìm kiếm linh hoạt, sử dụng chỉ mục để tăng tốc độ tìm kiếm.
- Ví dụ:
SELECT * FROM articles WHERE MATCH(content) AGAINST('database');
- Ví dụ:
14.2. Cách triển khai Full-Text Search
Triển khai Full-Text Search đòi hỏi việc tạo và quản lý Full-Text Index, cũng như sử dụng các câu lệnh SQL phù hợp để thực hiện tìm kiếm.
14.2.1. Tạo Full-Text Index
Bước 1: Đảm bảo rằng cột cần tìm kiếm hỗ trợ Full-Text Search (ví dụ:
VARCHAR
,TEXT
).Bước 2: Tạo Full-Text Index trên cột đó.
Ví dụ: Tạo Full-Text Index trên cột
content
của bảngarticles
:CREATE FULLTEXT INDEX idx_content ON articles(content);
14.2.2. Sử dụng Full-Text Search trong query
Sử dụng
MATCH ... AGAINST
: Để thực hiện tìm kiếm Full-Text, sử dụng câu lệnhMATCH ... AGAINST
.Ví dụ: Tìm kiếm các bài viết có chứa từ "database":
SELECT * FROM articles WHERE MATCH(content) AGAINST('database');
Tìm kiếm boolean: Full-Text Search hỗ trợ tìm kiếm boolean, cho phép sử dụng các toán tử như
+
,-
,*
để tìm kiếm chính xác hơn.Ví dụ: Tìm kiếm các bài viết có chứa từ "database" nhưng không chứa từ "SQL":
SELECT * FROM articles WHERE MATCH(content) AGAINST('+database -SQL' IN BOOLEAN MODE);
14.3. Tối ưu Full-Text Search
Tối ưu hóa Full-Text Search là quá trình cải thiện hiệu suất và độ chính xác của các truy vấn tìm kiếm.
14.3.1. Sử dụng stopwords
Stopwords là gì? Stopwords là các từ phổ biến (ví dụ: "the", "and", "is") thường được bỏ qua trong quá trình tìm kiếm vì chúng không mang nhiều ý nghĩa.
Tối ưu hóa: Sử dụng danh sách stopwords để giảm kích thước chỉ mục và cải thiện hiệu suất tìm kiếm.
Ví dụ: Thêm các từ vào danh sách stopwords:
SET GLOBAL innodb_ft_server_stopword_table = 'database/stopwords';
14.3.2. Tối ưu cấu hình Full-Text Index
Cấu hình kích thước token: Kích thước token (từ) mặc định là 3 ký tự. Bạn có thể điều chỉnh kích thước này để phù hợp với yêu cầu tìm kiếm.
Ví dụ: Đặt kích thước token tối thiểu là 2 ký tự:
SET GLOBAL innodb_ft_min_token_size = 2;
Cấu hình bộ nhớ cache: Tăng kích thước bộ nhớ cache cho Full-Text Index để cải thiện hiệu suất tìm kiếm.
Ví dụ: Đặt kích thước bộ nhớ cache là 64MB:
SET GLOBAL innodb_ft_cache_size = 67108864;
Kết luận
Full-Text Search là một công cụ mạnh mẽ giúp tìm kiếm văn bản một cách linh hoạt và hiệu quả trong cơ sở dữ liệu. Bằng cách tạo và quản lý Full-Text Index, sử dụng các câu lệnh tìm kiếm phù hợp, và tối ưu hóa cấu hình, bạn có thể cải thiện đáng kể hiệu suất và độ chính xác của các truy vấn tìm kiếm. Trong các bài tiếp theo, chúng ta sẽ đi sâu vào các kỹ thuật tối ưu hóa khác, chẳng hạn như caching và sử dụng views.
Từ vựng chuyên môn (Glossary)
Full-Text Search: Tìm kiếm toàn văn.
Full-Text Index: Chỉ mục toàn văn.
Tokenization: Quá trình chia nhỏ văn bản thành các từ.
Stopwords: Các từ phổ biến được bỏ qua trong tìm kiếm.
MATCH ... AGAINST: Câu lệnh tìm kiếm Full-Text.
Boolean Mode: Chế độ tìm kiếm boolean.
LIKE: Toán tử tìm kiếm chuỗi con.
REGEXP: Toán tử tìm kiếm dựa trên biểu thức chính quy.
Indexing: Quá trình tạo chỉ mục.
Cache: Bộ nhớ đệm.
Token Size: Kích thước từ.