MySQL慢查询:如何优化以下查询?

时间:2016-05-27 15:17:22

标签: mysql sql

以下是我正在使用的查询:

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'所以我可以弄清楚它不使用索引。

1 个答案:

答案 0 :(得分:2)

不,它没有使用索引。

为此,您必须与' word1%',' word2%'等进行比较..但是当你在joker使用joker时,它不起作用一开始。

但是,如果您的mysql版本相对现代,您可以使用全文索引,这将用于您的查询。

https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html