以下是我正在使用的查询:
SELECT *
FROM (
SELECT
(
CASE WHEN product_name like '%word1%' THEN 1 ELSE 0 END +
CASE WHEN product_name like '%word2%' THEN 1 ELSE 0 END +
CASE WHEN product_name like '%word3%' THEN 1 ELSE 0 END
) AS numMatches
FROM products as p
) as derived
WHERE numMatches > 0
ORDER BY numMatches DESC
LIMIT 30,10
我在product_name上添加了索引(BTREE),列中有300万条记录,查询在3-5秒内执行。
解释说'在哪里使用;使用filesort'所以我可以弄清楚它不使用索引。
答案 0 :(得分:2)
不,它没有使用索引。
为此,您必须与' word1%',' word2%'等进行比较..但是当你在joker使用joker时,它不起作用一开始。
但是,如果您的mysql版本相对现代,您可以使用全文索引,这将用于您的查询。
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html