下面是我使用的查询:
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秒内执行。
请解释一下“使用where;使用文件”,这样我就可以知道它没有使用索引。
发布于 2016-05-27 15:25:56
不,它没有使用索引。
为此,你必须与“word1 1%”、“Word2%”等进行比较。但当你一开始使用这个玩笑时就不起作用了。
但是,如果mysql版本相对现代,您可以使用全文索引,这将为您的查询服务。
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
https://stackoverflow.com/questions/37487041
复制相似问题