postgresql-performance相关内容

PostgreSQL计数+排序性能

我已经使用PostgreSQL和mental copg2构建了一个小型库存系统。一切都运行得很好,除了当我想要创建内容的聚合摘要/报告时,由于count()和排序,我得到的性能非常差。 数据库架构如下: CREATE TABLE hosts ( id SERIAL PRIMARY KEY, name VARCHAR(255) ); CREATE TABL ..
发布时间:2022-03-02 22:24:46 其他开发

如何加快 PostgreSQL 表中的行计数?

我们需要计算 PostgreSQL 表中的行数.在我们的例子中,不需要满足任何条件,如果能显着提高查询速度,那么获得行估计是完全可以接受的. 基本上,我们希望 select count(id) from 尽可能快地运行,即使这意味着无法获得准确的结果. 解决方案 快速估算: SELECT reltuples FROM pg_class WHERE relname = 'my_ta ..
发布时间:2021-12-30 15:51:35 其他开发

具有异构数据类型的 3 个字段的多列索引

我有一个包含 3 个字段的 postgres 表: a:postgis 几何 b : 数组 varchar[] c : 整数 我有一个涉及所有这些的查询.我想添加一个多列索引来加快速度,但我不能,因为这 3 个字段因其性质而不能归入同一索引. 这种情况下的策略是什么?添加3个索引gist,gin和btree,postgres会在查询时全部使用吗? 解决方案 单列索引 ..
发布时间:2021-12-21 23:25:28 其他开发

按 ID 删除数百万行的最佳方法

我需要从我的 PG 数据库中删除大约 200 万行.我有一个需要删除的 ID 列表.但是,我尝试这样做的任何方式都需要几天时间. 我尝试将它们放在一个表中,并以 100 为一组进行.4 天后,这仍然在运行,仅删除了 2972​​68 行.(我必须从 ID 表中选择 100 个 ID,删除该列表中的 where,从 ids 表中删除我选择的 100 个). 我试过了: DELETE F ..

只在内存中运行 PostgreSQL

我想为我编写的每个单元测试运行一个仅在内存中运行的小型 PostgreSQL 数据库.例如: @Before无效设置(){字符串端口 = runPostgresOnRandomPort();connectTo("postgres://localhost:"+port+"/in_memory_db");//...} 理想情况下,我会将单个 postgres 可执行文件签入版本控制,单元测试将使用 ..
发布时间:2021-12-05 21:39:47 其他开发

使用 PostgreSQL 快速查找相似字符串

我需要在表中创建相似字符串的排名. 我有下表 创建表名(名称字符变化(255)); 目前,我正在使用提供 similarity 功能的 pg_trgm 模块,但我遇到了效率问题.我创建了一个索引,如 Postgres 手册建议: CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops); 我正在执行以下查询: se ..
发布时间:2021-12-05 21:34:27 其他开发

防止 PostgreSQL 有时选择错误的查询计划

我在使用 PostgreSQL 8.4.9 进行查询的 PostgreSQL 性能方面有一个奇怪的问题.此查询选择 3D 体积内的一组点,使用 LEFT OUTER JOIN 在存在相关 ID 的位置添加相关 ID 列.x 范围内的微小变化都会导致 PostgreSQL 选择不同的查询计划,执行时间从 0.01 秒到 50 秒不等.这是有问题的查询: SELECT treenode.id AS ..

使用数据类型“文本"的任何缺点用于存储字符串?

根据PostgreSQL 文档,它们支持字符数据的 3 种数据类型: character variables (n), varchar(n) 可变长度有限制character(n), char(n) 固定长度,空白填充文本变量无限长度 在我的应用程序中,我遇到了一些令人不快的情况,其中插入/更新查询失败,因为要插入的所需文本超过了 varchar(n) 或 char(n) 限制. 对于这 ..
发布时间:2021-12-01 19:47:36 其他开发

优化 GROUP BY 查询以检索每个用户的最新行

我在 Postgres 9.2 中有以下用户消息日志表(简化形式): 创建表日志(日志日期日期,用户 ID 整数,有效载荷整数); 每个用户每天最多包含一条记录.在 300 天内每天将有大约 50 万条记录.每个用户的有效负载都在不断增加(如果这很重要). 我想在特定日期之前有效地检索每个用户的最新记录.我的查询是: SELECT user_id, max(log_date), max ..

从分组列中采样重复值的最佳性能

这个问题是关于first_value()的功能的a>,使用其他函数或解决方法. 这也是关于大表中的“性能略有提高".使用例如.max() 在下面解释的上下文中,需要虚假比较.即使速度很快,也会产生一些额外的成本. 这个典型的查询 SELECT x, y, count(*) as n从T按 x, y 分组; 需要重复GROUP BY中的所有列以返回不止一列.这样做的语法糖是使用位置引 ..

聚合时间序列的高效子查询

我想从某个日期每天构建一个时间序列并计算每天的一些统计数据.但是这个查询很慢......有什么办法可以加快速度吗?(例如,在子查询中选择一次表并计算该表每天的各种统计数据). 在代码中这看起来像 for i,连续一天:previous_days = 系列[0...i]some_calculation_a = some_operation_on(previous_days)some_calc ..
发布时间:2021-09-07 20:39:21 其他开发