# 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 表有两个索引:一个是 name 上的全文索引,一个是 id 上的主索引
在我的电子商务中,目标基本上是在用户访问页面时,为每个类别(大约 15 个类别)显示 4 个名称中包含“红色”一词的随机项目。
有什么更好的方法吗?
更新
my.cnf是这样设置的
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
最佳答案
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;
关于mysql - 改进我的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898405/