我有一个正在使用的查询ORDER BY RAND()
但这需要太长时间,而且随着数据的增长,情况会变得更糟。
该查询连接两个表,返回 5 个随机产品以及每个产品的随机图像
表 1 - 产品
product_id - pk auto-inc
name
description
Data
1 - product 1 - description
2 - product 2 - description
表 2 - 产品图像
image_id - pk auto-inc
product_id - fk index
filename
Data
1 - 1 - product 1 image
2 - 1 - product 1 image
3 - 1 - product 1 image
4 - 2 - product 2 image
...
我读了this https://stackoverflow.com/questions/4209886/mysql-select-random-row-with-join-from-two-tables and this http://jan.kneschke.de/projects/mysql/order-by-rand/但找不到优化查询的方法,所以我寻求帮助。
提前致谢。
ORDER BY RAND()
速度很慢,因为 DBMS 必须读取所有行,对它们进行排序,只保留几行。因此,该查询的性能在很大程度上取决于表中的行数,并且随着行数的增加而降低。
没有办法优化它。
不过,还有其他选择:
你可以实施“随机获取 5 行”通过执行 6 次查询:
这应该是much比...快ORDER BY RAND()
.
现在,要为每个随机产品获取随机图像:
SELECT *
FROM (
SELECT *
FROM Products
OFFSET 42 LIMIT 1
) p
JOIN ProductImages pi
ON pi.product_id = p.id
ORDER BY RAND()
LIMIT 1
内部查询仍然很快,外部查询仅对几行进行排序(假设每个产品的图像很少),因此仍然可以使用 order by rand()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)