Mysql 存在LIKE子句时的最佳索引类型

Mysql 存在LIKE子句时的最佳索引类型,mysql,indexing,Mysql,Indexing,我的问题是: SELECT name, usage_guidance, total_used_num FROM tags WHERE ( name LIKE CONCAT('%', ?, '%') OR usage_guidance LIKE CONCAT(?, '%') ) AND name NOT IN ($in) ORDER BY name LIKE CONCAT('%', ?, '%') DESC, name ASC LIMIT 6 哪一个是最好的索引 标签(名称、使用指南

我的问题是:

SELECT name, usage_guidance, total_used_num
FROM tags
WHERE
 ( name LIKE CONCAT('%', ?, '%') OR
   usage_guidance LIKE CONCAT(?, '%') )
 AND name NOT IN ($in)
ORDER BY name LIKE CONCAT('%', ?, '%') DESC, name ASC
LIMIT 6
哪一个是最好的索引

  • 标签(名称、使用指南)
  • 标签(使用指南、名称)
  • 标签(名称)
  • 标签(使用指南)
还是有更好的选择?!你知道,当像这样的
出现时,我对创建索引感到困惑。因为
像%something
永远不会利用索引。同样在上面的查询中,我在
中有
。。这就是我问这个问题的原因,也是想知道你对此的看法


以下是我的表格结构:

CREATE TABLE `tags` (
    `id` int(11) NOT NULL,
    `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `usage_guidance` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    `parent_id` int(11) UNSIGNED DEFAULT NULL,
    `related` int(11) UNSIGNED DEFAULT NULL,
    `total_used_num` int(11) UNSIGNED NOT NULL,
    `date_time` int(11) UNSIGNED NOT NULL
)
ENGINE=InnoDB DEFAULT CHARSET=latin1;
我想做一个自动完成的建议查询。大概是这样的:


是的,这里有一个数据库杀手

B树索引可用于以下表达式中的列比较:
使用=,>,>=,谢谢。。向上投票。。另外,请看一下我问题的更新版本,并告诉我我可以更好地编写该查询吗?从您的更新判断,您的查询可能不会受益于重复指向的全文搜索。编辑问题以反映这一点,我将重新投票。@barmar,使用全文不适合我要找的内容。。因为全文不支持基于一个字母的搜索。。!如果你不能使用FTS,那你就是运气不好。没有办法索引以
%
开头的搜索。也许这就是为什么SO不使用MySQL的原因。@Barmar。。!哦,真的吗?!所以不使用MySQL?!倒霉。。。!我想是的。事实上,我正试图建立一个类似于这样的网站。那么它使用什么数据库呢?SQL Server: