首页  >  文章  >  数据库  >  ## 如何使用 InnoDB 优化 MySQL LIKE \'%string%\' 查询?

## 如何使用 InnoDB 优化 MySQL LIKE \'%string%\' 查询?

Linda Hamilton
Linda Hamilton原创
2024-10-25 06:22:02615浏览

## How Can I Optimize MySQL LIKE '%string%' Queries with InnoDB?

在 InnoDB 中优化 MySQL LIKE '%string%' 查询

许多应用程序需要在文本正文中搜索字符串。 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 仍然需要扫描整个表。

解决方案 h3>

MySQL 通过匹配搜索字符串的开头来使用索引。对于像 LIKE 'whatever%' 这样的查询,可以使用索引,因为 'whatever' 锚定在字符串的开头。

但是,像 LIKE '%whatever%' 这样的查询没有这样的锚。搜索词在字符串中“浮动”出现,迫使 MySQL 扫描整个字段。

为了优化此类查询,我们可以使用全文索引。这些索引是专门为“浮动”搜索而设计的。 InnoDB 从 5.6.4 版本开始支持全文索引,使其成为优化 LIKE '%string%' 查询的可行选项。

以上是## 如何使用 InnoDB 优化 MySQL LIKE \'%string%\' 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

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