在InnoDB 上使用類似全文的功能搜尋MySQL 資料
在InnoDB 表上使用「LIKE」進行字串搜尋的傳統方法受到影響由於效能限制以及需要單獨檢查每個搜尋字詞。為了增強搜尋功能,需要一個模擬 InnoDB 表全文搜尋的解決方案。
解決方案:利用單獨的 MyISAM 表進行索引
此方法涉及建立一個單獨的 MyISAM 表。 MyISAM 表是 InnoDB 表的鏡像。 MyISAM 表包含一個使用「FULLTEXT」關鍵字索引的附加資料列。透過以行資料填入此 MyISAM 表,我們有效地建立了一個支援快速、類似全文搜尋功能的索引。
實作
考慮以下範例:
1 2 3 4 5 6 7 | -- InnoDB tables
CREATE TABLE users (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE forums (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE threads (id INT, subject VARCHAR(255), user_id INT, forum_id INT, PRIMARY KEY (id));
-- MyISAM fulltext table
CREATE TABLE threads_ft (id INT, subject VARCHAR(255), FULLTEXT(subject), PRIMARY KEY (id));
|
登入後複製
正在同步資料
正在同步資料
執行搜尋查詢
現在,您可以執行類似全文的搜尋查詢:
1 2 3 4 5 6 7 8 9 10 11 | -- Stored procedure for searching
CREATE PROCEDURE ft_search_threads(IN p_search VARCHAR(255))
BEGIN
SELECT *
FROM threads_ft
WHERE MATCH(subject) AGAINST (p_search IN BOOLEAN MODE)
ORDER BY RANK() DESC;
END ;
-- Example query
CALL ft_search_threads( 'keyword1 keyword2 keyword3' );
|
登入後複製
優點
這種方法有以下優點:
- 類似全文的搜尋功能,無需Sphinx的開銷或其他外部工具
- 與「LIKE」相比,搜尋效能更快查詢
- 簡化實作和維護
以上是如何實作MySQL InnoDB表的類別全文檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!