我有一个查询可以在数据库中选择6个名称。例如在mySql查询中获取随机值
SELECT names FROM users LIMIT 6
现在我想这个查询数据库中的表中选择一个随机的6名,这可能吗?而简单,但速度慢的解决方案如何
我有一个查询可以在数据库中选择6个名称。例如在mySql查询中获取随机值
SELECT names FROM users LIMIT 6
现在我想这个查询数据库中的表中选择一个随机的6名,这可能吗?而简单,但速度慢的解决方案如何
是:
SELECT names FROM users ORDER BY RAND() LIMIT 6
这使用随机数进行排序,并具有为O(n log n)的服务表现。它应该运行良好说10000行,但对于较大的表,它不会很好地扩展。
想要更快得到它,你可以看看Quassnoi的文章MySQL: selecting a number of random rows fast。
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 6
FROM users
) vars
STRAIGHT_JOIN
(
SELECT names,
@lim := @lim - 1
FROM users r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim/@cnt
) i
这具有O(n)性能。
SELECT names
FROM users
ORDER BY RAND()
LIMIT 6
这里是一个其他快速解决方案
Select names from users WHERE RAND() LIMIT 6
这可能是快,但它不是正确。它会给你6行,但它们是*不*随机的。 – 2010-05-05 19:44:38
相关:http://stackoverflow.com/questions/1823306/alerternative-to-mysql-order-by-rand – 2010-05-05 19:23:58