小编Ale*_*ros的帖子

PostgreSQL 最大化性能 SSD

我将拥有一个巨大的 PostgreSQL 9.3 数据库,其中包含许多表,每个表有超过 1 亿个条目。该数据库将基本上是只读的(一旦我填写了所有必要的表并构建了索引,不再对 DB 进行写操作)和单用户访问(从 localhost 运行和基准测试多个查询),因为将使用 DB仅用于研究目的。查询将始终在整数 DB 字段上使用 JOIN。

为此,我可能会购买 SSD (256-512GB)。我以前没有用过 SSD 做数据库,所以有什么我应该害怕的吗?我可以将整个数据库放在 SSD 上,还是只放在索引上?为 SSD 调整 PostgreSQL 是否需要任何特别的建议/教程?请注意,我有一个配备 i7 和 32Gb 内存的不错的工作站,所以也许您也可以提供一些建议。

postgresql postgresql-9.3

21
推荐指数
2
解决办法
3万
查看次数

数组的有效合并(删除重复项)

我有两张桌子,left2right2。两个表都会很大(1-10M 行)。

CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER);
ALTER TABLE left2 ADD PRIMARY KEY (id,t1);

CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] );
ALTER TABLE right2 ADD PRIMARY KEY(t1,d);
Run Code Online (Sandbox Code Playgroud)

我将执行这种类型的查询:

SELECT l.d + r.d,
       UNIQ(SORT((array_agg_mult(r.arr)))
FROM left2 l,
     right2 r
WHERE l.t1 = r.t1
GROUP BY l.d + r.d
ORDER BY l.d + r.d;
Run Code Online (Sandbox Code Playgroud)

在哪里聚合数组我使用函数:

CREATE AGGREGATE array_agg_mult(anyarray) (
SFUNC=array_cat,
STYPE=anyarray,
INITCOND='{}');
Run Code Online (Sandbox Code Playgroud)

连接数组后,我使用模块的UNIQ功能intarray。有没有更有效的方法来做到这一点?该arr字段上是否有任何索引可以加速合并(删除重复项)?聚合函数可以直接去除重复吗?如果有帮助,可以将原始数组视为已排序(并且它们是唯一的)。

SQL小提琴在这里

postgresql aggregate array postgresql-9.3

11
推荐指数
1
解决办法
2万
查看次数

PostgreSQL,整数数组,相等索引

我有一个巨大的整数数组列表(300,000,000 条记录)存储在 Postgres 9.2 DB 中。我想有效地搜索这些记录以获得完全匹配(仅相等)。我听说过 intarray 模块和相应的 gist-gin 索引。我想问以下问题:

  • PostgreSQL 是否使用哈希函数来检查整数数组的相等性,还是执行一个比较数组元素的蛮力算法?
  • 如果 PostgreSQL 使用哈希函数,是否有一些 PostgreSQL 函数代码来实际获取特定数组的哈希函数结果?
  • 哪个索引最适合这样的任务?B-tree,还是 intarray 模块提供的 gist - gin 索引?数据集将是静态的,即,一旦插入所有记录,就不会再插入。所以,建立索引/更新索引的时间对我来说并不重要。

postgresql btree gist-index

8
推荐指数
2
解决办法
3077
查看次数

PostgreSQL 获取每个范围的 top-k 最小值

假设我有以下数据:

| f1 | f2 | f3 |
|----|----|----|
|  1 |  1 |  1 |
|  1 |  1 |  5 |
|  1 |  2 |  3 |
|  1 |  2 |  6 |
|  1 |  3 |  4 |
|  1 |  3 |  7 |
|  2 |  1 |  2 |
|  2 |  1 | 22 |
|  2 |  2 |  3 |
|  2 |  2 |  4 |
Run Code Online (Sandbox Code Playgroud)

每个 …

postgresql-9.3 greatest-n-per-group top

4
推荐指数
1
解决办法
162
查看次数

PostgreSQL。生成随机整数集

使用此命令,我可以生成 1 和 200,000 之间的 16384 个随机整数。

SELECT generate_series (1,16384),(random()*200000)::int AS id
Run Code Online (Sandbox Code Playgroud)

我想生成 10 组这样的整数。每个集合必须有一个整数标识符,类似于:

1 | 135

1 | 1023

...第一组 16384 个随机数结束

2 | 15672

2 | 258732

... 第二组 16384 个随机数结束

这可以通过 SQL 命令实现,还是我应该为此编写一个函数?

postgresql random postgresql-9.3

1
推荐指数
1
解决办法
9150
查看次数