在 InnoDB 上使用类似全文的功能搜索 MySQL 数据
在 InnoDB 表上使用“LIKE”进行字符串搜索的传统方法受到影响由于性能限制以及需要单独检查每个搜索词。为了增强搜索功能,需要一个模拟 InnoDB 表全文搜索的解决方案。
解决方案:利用单独的 MyISAM 表进行索引
此方法涉及创建一个单独的 MyISAM 表。 MyISAM 表是 InnoDB 表的镜像。 MyISAM 表包含一个使用“FULLTEXT”关键字索引的附加列。通过用行数据填充此 MyISAM 表,我们有效地创建了一个支持快速、类似全文搜索功能的索引。
实现
考虑以下示例:
-- 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));
正在同步数据
要使 MyISAM 全文表保持最新,您可以使用触发器、批量更新或任何其他合适的机制。
执行搜索查询
现在,您可以执行类似全文的搜索查询:
-- 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');
优点
这种方法具有以下优点:
以上是如何实现MySQL InnoDB表的类全文检索?的详细内容。更多信息请关注PHP中文网其他相关文章!