首页 >数据库 >mysql教程 >如何使用MyISAM和存储过程对InnoDB表进行高效的全文搜索?

如何使用MyISAM和存储过程对InnoDB表进行高效的全文搜索?

Linda Hamilton
Linda Hamilton原创
2024-12-16 12:14:15760浏览

How Can I Perform Efficient Full-Text Search on InnoDB Tables Using MyISAM and Stored Procedures?

使用 MyISAM 和存储过程在 InnoDB 上进行全文搜索

找到一种快速有效的方法来对 InnoDB 表执行全文搜索可以是一个挑战。虽然 Sphinx 等工具提供了解决方案,但本文探讨了使用 MyISAM 和存储过程的纯 MySQL 方法。

挑战

一个在以下位置搜索多个字符串的简单查询由于性能缓慢和限制,使用 LIKE 语句的行可能会出现问题。

SELECT ... WHERE row LIKE '%some%' OR row LIKE '%search%' OR  row LIKE '%string%'

解决方案

建议的解决方案涉及创建一个 MyISAM 全文表,该表将索引回 InnoDB 表。这允许对需要搜索的特定列(例如主题)建立索引。

数据库结构

InnoDB 表是为主要数据定义的,例如用户和线程。

create table users (...) engine=innodb;

create table forums (...) engine=innodb;

create table threads (
...
subject varchar(255) not null, -- column we want to search
...
)
engine=innodb;

MyISAM 全文表(例如,threads_ft)提供搜索index.

create table threads_ft (
...
subject varchar(255) not null,
fulltext (subject), -- fulltext index on subject
...
)
engine=myisam;

存储过程

存储过程(例如,ft_search_threads)接受搜索项作为输入,并使用 MyISAM 全文索引执行搜索。然后它将结果与 InnoDB 表连接起来以检索必要的数据。

create procedure ft_search_threads (
in p_search varchar(255)
)
begin
...
select
 t.*,
 ...
from
 threads_ft tft
...
match(tft.subject) against (p_search in boolean mode) 
...
order by 
 rank desc
...
end;

示例用法

可以从 PHP 应用程序或命令行工具:

call ft_search_threads('+innodb +clustered +index');

此示例返回线程表中与搜索匹配的前 100 个结果术语“innodb 聚集索引”。

通过利用这种方法,您可以在 InnoDB 表上实现类似全文的搜索功能,而不会影响性能。它涉及创建一个专用的 MyISAM 表用于索引和编写一个存储过程来执行搜索和数据检索。

以上是如何使用MyISAM和存储过程对InnoDB表进行高效的全文搜索?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn