我该如何优化此查询?

时间:2013-04-24 23:28:51

标签: mysql indexing

我从数据库中选择产品列表并将其显示给用户。我已经为where子句中使用的列创建了索引,然后返回并加载结果需要花费大量时间。

SELECT 
    prod_disp.pdid, prod_disp.cat_id, prod_disp.title, prod_disp.image_url, 
    prod_disp.price, prod_stat.eyeing_ids, prod_stat.eyeing_num, 
    prod_stat.listing_num, prod_stat.reviews_num, prod_stat.reviews_score
FROM 
    products.prod_disp 
    INNER JOIN products.prod_stat ON prod_disp.pdid = prod_stat.pdid
WHERE 
    prod_disp.active='1' AND prod_disp.cat_id='7' 
ORDER BY 
    RAND()
LIMIT 0, 21;

2 个答案:

答案 0 :(得分:1)

计算结果。

按rand()删除订单。

生成一个介于0和Count-21之间的随机数,让我们调用它_rand

替换LIMIT 0,21;限制_rand,_rand + 21;

答案 1 :(得分:0)

我不确定,但我认为ORDER BY rand()会导致MySQL在内部将所有数据放入temptable(甚至可以写在磁盘上),然后随机重新排序。如果您可以接受,则可以根据索引字段将其替换为随机位置。

您还需要这些索引:

  • prod_disp(pdid,prod_disp.cat_id,active)
  • FK:产品(prod_stat)