postgresql - Postgres 中的快速随机行选择

标签 postgresql random

我在 postgres 中有一个表,其中包含几百万行。我在网上查了一下,发现如下

SELECT myid FROM mytable ORDER BY RANDOM() LIMIT 1;

它有效,但它真的很慢......是否有另一种方法来进行该查询,或者直接选择随机行而不读取所有表的方法?顺便说一下,'myid' 是一个整数,但它可以是一个空字段。

最佳答案

您可能想尝试使用 OFFSET ,如

SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;

Nmytable 中的行数.您可能需要先做一个 SELECT COUNT(*)计算出 N 的值.

更新(作者:Antony Hatchkins)

您必须使用 floor这里:

SELECT myid FROM mytable OFFSET floor(random() * N) LIMIT 1;

考虑一个包含 2 行的表格; random()*N生成 0 <= x < 2例如 SELECT myid FROM mytable OFFSET 1.7 LIMIT 1;由于隐式舍入到最接近的 int,因此返回 0 行。

关于postgresql - Postgres 中的快速随机行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297396/

相关文章:

c++ - 如何在标准构造函数之外设置 boost::uniform_int_distribution 的参数?

algorithm - rBST 的计算概率

haskell - 在 Haskell 中映射 IO

sql - 表之间的最近值

ruby-on-rails - 使用 heroku db :push when I'm using PostgreSQL as development db 获取 SQLite 错误

在 Windows 上使用 shp2pgsql.exe 将 shapefile 提取到 PostgreSQL/PostGIS 数据库中的 Python 脚本

postgresql - Postgres 的内置 PGLZ 压缩与 GZIP 相比如何?

postgresql - 错误 : operator does not exist: character varying = numeric

c++ - boost 中默认的随机数生成器种子是什么?

Java - 生成随机数字簇