jms*_*rra 18 mysql sql indexing query-optimization
有这个表:
CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我们想优化以下查询:
SELECT id FROM example WHERE keywords LIKE '%whatever%'
Run Code Online (Sandbox Code Playgroud)
该表是InnoDB,(现在没有FULLTEXT),这将是用于优化此类查询的最佳索引?
我们尝试过一个简单的方法:
ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);
Run Code Online (Sandbox Code Playgroud)
但是一个解释查询显示需要扫描整个表, 如果我们的查询LIKE'无论%'代替,这个索引表现良好,但在其他方面没有价值.
无论如何要为innoDB优化这个吗?
谢谢!
Mar*_*c B 45
索引是从字符串的开头到结尾构建的.当您使用LIKE 'whatever%'
type子句时,MySQL可以使用这些基于开始的索引来whatever
快速查找.
但是切换到LIKE '%whatever%'
在字符串开头删除该锚点.现在不能使用基于开始的索引,因为您的搜索词不再锚定在字符串的开头 - 它在中间某处"浮动",整个字段必须是搜索.任何LIKE '%...
查询都不能使用索引.
这就是为什么你使用全文索引,如果你所做的只是"浮动"搜索,因为它们是为这种用法而设计的.
主要说明:InnoDB现在支持版本5.6.4的全文索引.因此,除非你不能升级到至少5.6.4,否则没有什么能阻止你使用InnoDB*和全文搜索.
归档时间: |
|
查看次数: |
19952 次 |
最近记录: |