我从数据库中选择产品列表并将其显示给用户。我已经为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;
统计结果
通过rand()删除顺序。
生成一个介于0和Count-21之间的随机数,命名为_rand
replace LIMIT 0, 21;
我不确定,但我认为ORDER BY rand()导致MySQL内部将所有数据放入一个temptable(甚至可以写在磁盘上),然后随机重新排序。如果您可以接受,您可以根据索引字段将其替换为随机的where。
你还需要这些索引:
- prod_disp (pdid prod_disp。cat_id活跃)
- 颗:产品(prod_stat)