我有一个查询,在数据库中选择6个名称.例如
SELECT names FROM users LIMIT 6
Run Code Online (Sandbox Code Playgroud)
现在我希望这个查询在数据库表中选择一个随机的6个名字,这可能吗?如何
简单但缓慢的解决方案是:
SELECT names FROM users ORDER BY RAND() LIMIT 6
Run Code Online (Sandbox Code Playgroud)
这使用随机数排序并具有O(n log n)性能.它应该可以运行10000行,但对于较大的表,它将无法很好地扩展.
为了加快速度,你可以看看Quassnoi的文章MySQL:快速选择一些随机行.
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
Run Code Online (Sandbox Code Playgroud)
这具有O(n)性能.