问题标签 [postgresql-performance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
195 浏览

sql - Order BY 将 30 毫秒的查询转换为 7120 毫秒的查询。已知的性能问题?

我有一个包含 1m 条记录的用户表:

我有以下针对 postgres 9.1 db 运行的查询:

使用 pgAdmin 3,此 SQL 需要7120 毫秒才能返回 25 行。如果我删除 'ORDER BY guest = false, fname ASC' 查询只需31ms

我有以下索引:

有任何想法吗?谢谢!

更新解释

0 投票
2 回答
228 浏览

ruby-on-rails - 更快地搜索字段的第一个字符不匹配 [A-Za-z] 的记录?

我目前有以下内容:

fname我可以通过他们的初始查询用户列表,如下所示:

由于以下索引,这很快:

我现在要做的是能够查询所有不以字母AZ开头的用户。我让它像这样工作:

但问题是这个查询很慢,似乎没有使用索引来加速第一次查询。关于如何优雅地使第二个查询(非 az)更快的任何建议?

我正在使用带有 rails 3.2 的 Postgres 9.1

谢谢

0 投票
2 回答
32668 浏览

performance - 如何理解 EXPLAIN ANALYZE

我对查看 EXPLAIN ANALYZE 结果不是很熟悉,我的查询太慢了。我试图阅读如何解释解释查询的结果,但我仍然不知道我应该寻找什么,以及可能有什么问题。我有一种感觉,某处有一些大红灯在闪烁,我只是没看到。

所以查询很简单,看起来像这样:

结果是这样的:

一点背景知识:我在 Postgresql 9.1.6 上,在 Herokus 专用数据库上运行。我的数据库有大约 7,5Gb 的 RAM,表 cars 包含 3,1M 行,大约 2,0M 的行有 sales_state = 'onsale'。该表有 170 列。它使用的索引如下所示:

有人看到一些明显的大问题吗?

编辑:

pg_relation_size: 2058444800 pg_total_relation_size: 4900126720

pg_relation_size: 46301184

平均:636.9732567210792995

没有限制:

0 投票
4 回答
7329 浏览

sql - Postgresql 计数+排序性能

我使用 postgresql 和 psycopg2 构建了一个小型库存系统。一切都很好,除了当我想创建内容的汇总摘要/报告时,由于 count()'ing 和排序,我得到了非常糟糕的性能。

数据库架构如下:

还有一些其他领域,但这些领域并不相关。

我想提取 2 个不同的报告: - 包含每个项目数量的所有主机列表,从最高到最低计数排序 - 包含每个主机数量的所有项目列表,从最高到最低计数排序

为此,我使用了 2 个查询:

具有主机计数的项目:

具有项目计数的主机:

问题是:查询在返回任何数据之前运行 5-6 秒。由于这是一个基于 Web 的应用程序,因此 6 秒是不可接受的。该数据库大量填充了大约 50k 主机、1000 个项目和 400 000 个主机/项目关系,并且在使用应用程序时(或者如果)可能会显着增加。

在玩了之后,我发现通过删除“ORDER BY count DESC”部分,两个查询都会立即执行而没有任何延迟(完成查询不到 20 毫秒)。

有什么办法可以优化这些查询,以便我可以毫不拖延地对结果进行排序?我正在尝试不同的索引,但是看到计数被计算出来,可以为此使用索引。我读过postgresql中的count()'ing很慢,但它的排序给我带来了问题......

我目前的解决方法是将上述查询作为每小时作业运行,将结果放入一个新表中,该表在计数列上有一个索引,以便快速查找。

我使用 Postgresql 9.2。

更新:按顺序查询计划:)

更新:这个问题的所有答案都非常有助于学习和理解 Postgres 的工作原理。这个问题似乎没有任何明确的解决方案,但我非常感谢您提供的所有优秀答案,我将在以后的 Postgresql 工作中使用这些答案。非常感谢你们!

0 投票
2 回答
4384 浏览

sql - 每 15 分钟有效地查询一个巨大的时间序列表中的一行

我有两个表,conttagtable(t)和contfloattable(cf)。T 有大约 43k 行。CF拥有超过90亿。

tagindex我在两个表的列上创建了两个表的索引。可以将此列视为 for 的唯一标识符和 for的conttagtable外键。我没有在与另一个表相关的任何一个表上显式创建 PK 或外键,尽管此数据在逻辑上与两个表上的列相关,就像a和where a一样。数据来自微软访问转储,我不知道我是否可以相信 tagindex 是唯一的,因此不强制执行“唯一性”。conttagtableconfloattabletagindexconttagtable.tagindexPRIMARY KEYcontfloattable.tagindexFOREIGN KEY (tagindex) REFERENCES conttagtable(tagindex)

数据本身非常庞大。

我需要从contfloattable每个. 因此,如果给定的 4000 个样本跨越 30 分钟,我需要一个 0-14 分钟范围内的样本和一个 15-30 分钟范围内的样本。15 分钟范围内的任何一个样品都是可以接受的;第一个,最后一个,随机的,随便什么。contfloattable.dateandtimeconttagtable.tagidcontfloattabletagid

简而言之,我需要每 15 分钟获取一个样本,但每个 t.tagname 只需要一个样本。现在的样本每 5 秒记录一次,数据跨越两年。就 sql 而言,这是一个大数据问题,而且超出了我的想象。我从谷歌搜索或搜索 SO 中尝试的所有时间间隔解决方案都产生了如此长的查询时间,以至于它们不实用。

  • 我的索引是否足以进行快速连接?(它们似乎是在省略时间间隔部分时)
  • 我会从添加任何其他索引中受益吗?
  • 实现上述目标的最佳/最快查询是什么?

这是一个包含架构和一些示例数据的 SQLFiddle:http ://sqlfiddle.com/#!1/c7d2f/2

架构:

我想看到的输出是这样的:

……等等等等……

正如 Clodoaldo 所建议的,这是我的最新尝试,有什么建议可以加快速度吗?

从上面查询计划: http: //explain.depesz.com/s/loR

0 投票
2 回答
787 浏览

sql - 带有日期时间等的 WHERE 子句的索引

我正在使用 Postgres 9.1 并且查询的执行速度非常慢。

查询:

结果:

如您所见,这大约需要 11 秒。我将如何添加索引以优化此查询性能?

0 投票
2 回答
657 浏览

sql - postgresql - pk 与唯一索引

在 PostgreSQL 9 数据库中,有一个表包含一个串行字段 X,它是一个 PK(启用了 oid)和其他字段。

将 postgres 的 pgadmin 与该表一起使用 - 查询需要 30 秒。

如果我在同一个字段 X 上添加唯一索引 - pgadmin 中的相同查询需要 3 秒。

PK 是隐式索引: http ://www.postgresql.org/docs/current/static/indexes-unique.html

那么为什么显式索引会产生影响呢?

这是一个 pgadmin 问题吗?

我是否需要 PK 字段的显式索引?

0 投票
3 回答
1424 浏览

database - Postgresql 查询优化 不允许内/外连接

我得到了这个查询来优化 POSTGRESQL 9.2:

作为我学校作业的一部分。

我在各个表上创建了这些索引:items(category)-->2ndary b+tree、bids(item_id)-->2ndary b+tree 和categories(id)-->primary index here,

奇怪的是,PostgreSQL 正在对我的 Items、Categories 和 Bids 表进行顺序扫描,当我设置 时enable_seqscan=off,索引搜索结果比下面的结果更可怕。

当我在 PostgreSQL 中运行解释时,结果如下:请不要删除缩进,因为它们很重要!

请在 explain.depesz.com 上查看此计划。

我只想知道为什么会发生这种情况,即与顺序扫描相比,为什么索引会使查询变得非常慢。

编辑:我想我已经设法通过阅读 postgresql 文档发现了一些东西。Postgresql 决定对某些表(例如 bids 和 items)进行 seq 扫描,因为它预测它必须检索表中的每一行(比较实际时间之前括号中的行数和实际时间部分中的行数)。顺序扫描更适合检索所有行。好吧,在那部分什么都做不了。

我已经创建了额外的索引categories(name),下面的结果就是我所拥有的。它以某种方式得到了改进,但现在哈希连接被嵌套循环所取代。为什么有任何线索?

看看这里的计划是否更好。

通过在 category(id) 和items(category). Postgresql 使用这两个索引来获得 114062.92 成本。但是,现在 postgresql 正在与我玩游戏,不使用索引!为什么这么马车?

0 投票
3 回答
1248 浏览

mysql - Postgres 等效于 MySQL 的 BENCHMARK() 函数

我正在使用 Postgresql。我想测试一个函数执行需要多少时间。由于该函数只需要几毫秒,我想在循环中调用它 1000 次以获得准确的数字。

MySQL 有一个 BENCHMARK() 函数来执行此操作。是否有等价物或者我必须编写一个带有循环的程序才能做到这一点?

0 投票
1 回答
981 浏览

postgresql - PostgreSQL 索引优化

目前我有以下 SQL Select 语句的以下指标。尽管如此,查询对我来说似乎仍然很慢(10.000 条记录)。你有什么建议?

  1. 索引 category_id
  2. 索引交付日期
  3. product_id、product_name 上的索引

这是我的 DDL:

和 SQL:

任何帮助,将不胜感激。

在 EXPLAIN ANALYZE 的输出下方: