使用MySQL或PHP命令返回随机行更好吗?使用MySQL或PHP更好地随机化结果?
例如,我有一个product
表有10列和1000000行,并希望返回10个随机行。
方法1(让MySQL的做的大部分工作):
$query = mysql_query("SELECT * FROM product WHERE product_id in (SELECT product_id FROM product ORDER BY RAND() LIMIT 10)"); while($results[] = mysql_fetch_row($query));
方法2(让PHP做的大部分工作):
$query = mysql_query("SELECT * FROM product"); while($results[] = mysql_fetch_row($query)); shuffle($results); $results = array_slice($results, 0, 10);
是方法1或方法2更好?
请考虑http://codereview.stackexchange.com/faq vs http://stackoverflow.com/faq,以便根据“哪个更好”的方式来解决未来的问题。但是,在这种情况下,返回大于您需要的结果集实际上可能会导致PHP中出现memory_limit_exceeded错误,并且在给定足够大的结果集的情况下会导致主要的性能错误(并且如果其中一列是BLOB +,那么它可以快速杀死一个脚本)。如果MySQL不是托管在本地主机上,那么大量并行脚本的网络性能足以让您自己偶然地发生DDOS。 – BrianHall 2013-03-22 18:54:48
自己测试一下吗? – Kermit 2013-03-22 18:56:38
测试自己证明是徒劳的。兰德成为瓶颈。永远不要使用它! – 2013-03-22 19:04:53