である私のクエリ:最高の指標である1ベストタイプは、いつ句等がある。ここ
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、*フルテキスト*を使用しているのは、私が探しているものには適していません。*フルテキスト*は検索ベースの1文字です。 – stack
FTSを使用できない場合は、運が悪いだけです。 '%'で始まる検索のインデックスを作成する方法はありません。 – Barmar
これは、SOがMySQLを使用していない理由です。 – Barmar