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

有此表:

CREATE TABLE `example` (

`id` int(11) unsigned NOT NULL auto_increment,

`keywords` varchar(200) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

我们想优化以下查询:

SELECT id FROM example WHERE keywords LIKE '%whatever%'

该表是InnoDB,(因此暂时没有FULLTEXT),这将是优化此类查询的最佳索引?

我们尝试了一个简单的方法:

ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);

但是一个解释性查询表明, 如果我们的查询在“像%%”这样的地方查询,则需要扫描 ,该索引表现良好,但否则就没有价值。

无论如何,有没有为innoDB优化呢?

谢谢!

回答:

索引是从字符串的开头到结尾建立的。使用LIKE

'whatever%'type子句时,MySQL可以使用那些基于开始的索引来whatever快速查找。

但是切换到LIKE

'%whatever%'会删除字符串开头的锚点。现在,无法使用基于开始的索引,因为您的搜索词不再锚定在字符串的开头-它“浮动”在中间的某个位置,必须搜索整个字段。任何LIKE

'%...查询都不能使用索引。

这就是为什么如果您所做的只是“浮动”搜索,就使用全文索引的原因,因为它们是针对此类使用而设计的。

需要特别注意的是:从5.6.4版本开始,InnoDB现在支持全文索引。因此,除非您不能升级到至少5.6.4,否则您将无法使用InnoDB *

全文本搜索。

以上是 在innoDB中优化MySQL LIKE'%string%'查询 的全部内容, 来源链接: utcz.com/qa/416537.html

回到顶部