此解决方案最好使用索引列.
下面是一个标有100,000行的优化查询工作台的简单示例。
优化:300 msSELECT
g.*FROM
table g JOIN
(SELECT
id FROM
table
WHERE
RAND()
((4 / COUNT(*)) * 10)
FROM
table)
ORDER BY RAND()
LIMIT 4) AS z ON z.id= g.id
关于极限安装的注意事项*限制4和4/计数(*)。4s必须是相同的号码。改变你返回的次数并不会对速度造成太大的影响。在极限4和极限1000的基准是相同的。最高可达600毫秒
关于联接的注意事项:随机化-仅仅是id-比整行随机化要快。因为它必须将整个行复制到内存中,然后将其随机化。联接可以是链接到子查询ITS的任何表,以防止tablescans。
注哪里条款:WHERE计数限制了随机结果的数量。它获取一个百分比的结果,并对它们进行排序,而不是对整个表进行排序。
注子查询:if do联接和Extern外WHERE子句条件,您需要将它们同时放在子查询和子查询中。有一个准确的计数和提取正确的数据。
联合国国际刑事法庭:1200 msSELECT
g.*FROM
table gORDER BY RAND()LIMIT 4
行家
比order by rand()..此解决方案可以使用具有索引列的任何表。
反方
对于复杂的查询,它有点复杂。需要在子查询中维护两个代码基