【问题标题】:Random row from big query result大查询结果中的随机行
【发布时间】:2011-03-30 22:44:57
【问题描述】:

我需要从索引列上使用 SQL 选择检索的查询结果中获取 1-2 行,而不获取整个记录集。

例如,我将使用查询检索 10 000 条记录

SELECT * FROM table WHERE field 1>1 AND field1 < 10

但是对于我的数据库的高负载,我只需要从该查询中获取 1 个随机行。

我可以使用

SELECT * FROM table WHERE field 1>1 AND field1 < 10 LIMIT 100, 1

但我不知道要使用正确的偏移范围的记录编号

我怎样才能实现这个目标?

【问题讨论】:

标签: mysql random row


【解决方案1】:

首先限制您选择的记录如何?

SELECT * FROM table WHERE field1 IN (CONVERT(RAND()*10,SIGNED),CONVERT(RAND()*10,SIGNED)) LIMIT 2

【讨论】:

  • 我对 field1 有标准,我该如何选择它?
  • 如果条件是一个范围,您可以创建一个落在该范围内的随机数
  • 但即使我选择了标准,此选择中也有很多行,我不应该首先选择,而是随机行。无论如何,谢谢你也推动了我有趣的想法。
【解决方案2】:

你可以使用 ORDER BY RAND()

SELECT * FROM table WHERE field1 > 1 AND field1 < 10 ORDER BY RAND() LIMIT 1

这将返回 1 个随机行,其中 field1 在 1 到 10 之间

【讨论】:

  • 在有 10kk 条记录的数据库上,您将关闭服务器并失去所有用户 ;-)
  • 确实如此。然后您将需要使用本文中描述的两个查询:titov.net/2005/09/21/…
  • count() 不是大型 mysql 查询结果的变体,在 1kk 行表上使用 WHERE 计算 calc() 需要几秒钟。我有一些想法,但我不确定它们的正确性。
猜你喜欢
  • 2021-12-05
  • 2016-05-27
  • 2018-10-13
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多