0

我正在从数据库中选择产品列表并将其显示给用户。我已经为 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;
4

2 回答 2

1

计算结果。

通过 rand() 删除订单。

生成一个介于 0 和 Count-21 之间的随机数,我们称之为 _rand

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

于 2013-04-25T00:41:04.440 回答
0

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

您还需要这些索引:

  • prod_disp(pdid,prod_disp.cat_id,活动)
  • FK:产品(prod_stat)
于 2013-04-24T23:38:29.990 回答