Mysql 通过SQL显示有限的随机行

Mysql 通过SQL显示有限的随机行,mysql,Mysql,我正在使用select命令从sql表中选择值。它从表中返回10个值。但我想随机显示3个值。在大表上不是一个好主意: select * from mytable order by rand() limit 3 在大桌子上不是个好主意: select * from mytable order by rand() limit 3 简单地说,您可以对小桌子执行以下操作: SELECT * FROM yourTable ORDER BY RAND() LIMIT 3; 但是如果您有一个大表,那么您可

我正在使用select命令从sql表中选择值。它从表中返回10个值。但我想随机显示3个值。

在大表上不是一个好主意:

select * from mytable order by rand() limit 3

在大桌子上不是个好主意:

select * from mytable order by rand() limit 3

简单地说,您可以对小桌子执行以下操作:

SELECT * FROM yourTable
ORDER BY RAND()
LIMIT 3;
但是如果您有一个大表,那么您可以使用resultset的
碎片
进行选择…假设您的表包含200K行,您只需要随机选择100行,那么您就可以计算resultset的片段…给定表的resultset片段将为0.0005,以后可以这样使用:

SELECT * FROM yourTable WHERE RAND()<=0.0005
  SELECT * FROM yourTable WHERE RAND()<=0.0006 LIMIT 100;

从您的表中选择*,其中RAND()简单地说,您可以对小表执行以下操作:

SELECT * FROM yourTable
ORDER BY RAND()
LIMIT 3;
但是如果您有一个大表,那么您可以使用resultset的
碎片
进行选择…假设您的表包含200K行,您只需要随机选择100行,那么您就可以计算resultset的片段…给定表的resultset片段将为0.0005,以后可以这样使用:

SELECT * FROM yourTable WHERE RAND()<=0.0005
  SELECT * FROM yourTable WHERE RAND()<=0.0006 LIMIT 100;
从RAND()所在的表中选择*尝试以下操作:

SELECT * 
FROM tableName
ORDER BY RAND()
LIMIT 3
但是请注意,使用按兰德排序()
按兰德排序()
已经落后于表中仅100行的优化查询

展示了基于性能生成随机记录的不同技术。

尝试以下方法:

SELECT * 
FROM tableName
ORDER BY RAND()
LIMIT 3
但是请注意,使用按兰德排序()
按兰德排序()
已经落后于表中仅100行的优化查询


展示了基于性能生成随机记录的不同技术。

按兰德排序()
如果您有一个大表,则速度会非常慢。
按兰德排序()
如果您有一个大表,则速度会非常慢。每个人都建议
按兰德排序()
。如果您有一个小表,这是很好的,但是如果您有很多数据,这将非常缓慢。如果它对您来说太慢,请参阅我在这里的答案以获得替代方案:每个人都建议
orderbyrand()
。如果您有一个小表,这是很好的,但是如果您有很多数据,这将非常缓慢。如果速度太慢,请参见我的答案: