【发布时间】:2017-05-09 08:47:07
【问题描述】:
这是我的查询:
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
哪个是最好的索引?
tags(name,usage_guidance)tags(usage_guidance,name)tags(name)tags(usage_guidance)
或者有没有更好的选择?!你知道,当LIKE 出现时,我对创建索引感到困惑。因为LIKE %something 永远不会从索引中受益。同样在上面的查询中,我有AND、OR 和IN ..这就是为什么我问这个问题也想知道你对它的看法。
这是我的表结构:
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;
我正在尝试进行自动完成建议查询。像这样的:
【问题讨论】:
-
@barmar,使用 full-text 不适合我正在寻找的内容.. 因为 full-text 不支持基于一个字母的搜索..!
-
如果你不能使用 FTS,那你就太不走运了。无法索引以
%开头的搜索。 -
也许这就是 SO 不使用 MySQL 的原因。
-
@Barmar ..!哦真的吗?!所以不使用MySQL?!妈的……!我以为是的。实际上,我正在尝试制作一个类似于 SO 的网站。那么它使用的是什么数据库?
-
SQL-Server: meta.stackexchange.com/questions/17988/…