2010-05-05 81 views
1

我有一个查询可以在数据库中选择6个名称。例如在mySql查询中获取随机值

SELECT names FROM users LIMIT 6 

现在我想这个查询数据库中的表中选择一个随机的6名,这可能吗?而简单,但速度慢的解决方案如何

+0

相关:http://stackoverflow.com/questions/1823306/alerternative-to-mysql-order-by-rand – 2010-05-05 19:23:58

回答

7

是:

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)性能。

1
SELECT names 
FROM users 
ORDER BY RAND() 
LIMIT 6 
0

这里是一个其他快速解决方案

Select names from users WHERE RAND() LIMIT 6 
+2

这可能是快,但它不是正确。它会给你6行,但它们是*不*随机的。 – 2010-05-05 19:44:38