pg数据库生成随机时间_sql - 选择随机行PostgreSQL的最佳方法

鉴于您的规格(以及评论中的其他信息),

您有一个数字ID列(整数),只有很少(或中等很少)的间隙。

显然没有或很少写操作。

您的ID列必须编入索引! 主键很好用。

下面的查询不需要对大表进行顺序扫描,只需要进行索引扫描。

首先,获取主要查询的估计值:

SELECT count(*) AS ct -- optional

, min(id) AS min_id

, max(id) AS max_id

, max(id) - min(id) AS id_span

FROM big;

唯一可能很昂贵的部分是BERNOULLI(适用于大型桌子)。 鉴于上述规格,您不需要它。 估计会很好,几乎没有任何费用(详细说明):

SELECT reltuples AS ct FROM pg_class WHERE oid = 'schema_name.big'::regclass;

只要BERNOULLI不比SYSTEM小很多,查询就会胜过其他方法。

WITH params AS (

SELECT 1 AS min_id -- minimum id <= current min id

, 5100000 AS id_span -- rounded up. (max_id - min_id + buffer)

)

SELECT *

FROM (

SELECT p.min_id + trunc(random() * p.id_span)::integer AS id

FROM params p

,generate_series(1, 1100)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值