改进我的MYSQL查询

时间:2016-11-30 21:20:00

标签: mysql

# Query_time: 0.007476  Lock_time: 0.000012 Rows_sent: 4  Rows_examined: 13463 
SELECT id,name FROM items 
WHERE items_approved = 1 AND item_name LIKE '%apple%' 
ORDER BY RAND() LIMIT 4;

我刚注意到我的mysql-slow.log中有很多慢查询 所以我开始逐一优化它们......

让我们从这个简单的查询开始:

SELECT id,name FROM items 
WHERE items_approved = 1 AND item_name LIKE '%red%' 
ORDER BY RAND() LIMIT 4;

但是这个表包含15K项,所以我需要一个更好的方法来获得4个随机项。 items表有两个索引:一个名称为fulltext,另一个为id

在我的电子商务中,目标基本上是显示4个随机项,其中包含" red"在用户访问页面时,每个类别的名称(约15个类别)。

对此更好的方法是什么?

更新

my.cnf设置如下

 log_slow_queries   = /var/log/mysql/mysql-slow.log
 long_query_time = 2
 log-queries-not-using-indexes

1 个答案:

答案 0 :(得分:0)

SELECT id,name FROM items 
WHERE items_approved = 1 
  AND item_name LIKE '%red%' -- '% %' doesnt use index, change to FULL TEXT SEARCH
ORDER BY RAND() 
LIMIT 4;

检查MySQL索引TIPS

如果您有全文索引,请尝试以下内容:

SELECT id,name FROM items 
WHERE items_approved = 1 
  AND MATCH(item_name) 
  AGAINST('red' IN BOOLEAN MODE )
ORDER BY RAND() 
LIMIT 4;