# 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
答案 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;