许多应用程序需要在文本正文中搜索字符串。 MySQL 提供了 LIKE 运算符来执行此类搜索,但是我们如何优化这些查询以获得最佳性能?
考虑下表:
<code class="sql">CREATE TABLE `example` ( `id` int(11) unsigned NOT NULL auto_increment, `keywords` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;</code>
执行如下查询时:
<code class="sql">SELECT id FROM example WHERE keywords LIKE '%whatever%'</code>
我们可能期望数据库使用索引来加快搜索速度。但是,如果我们使用以下方法在关键字列上添加简单索引:
<code class="sql">ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);</code>
EXPLAIN 查询显示 MySQL 仍然需要扫描整个表。
MySQL 通过匹配搜索字符串的开头来使用索引。对于像 LIKE 'whatever%' 这样的查询,可以使用索引,因为 'whatever' 锚定在字符串的开头。
但是,像 LIKE '%whatever%' 这样的查询没有这样的锚。搜索词在字符串中“浮动”出现,迫使 MySQL 扫描整个字段。
为了优化此类查询,我们可以使用全文索引。这些索引是专门为“浮动”搜索而设计的。 InnoDB 从 5.6.4 版本开始支持全文索引,使其成为优化 LIKE '%string%' 查询的可行选项。
以上是## 如何使用 InnoDB 优化 MySQL LIKE \'%string%\' 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!