相关疑难解决方法(0)

在只接收 INSERT 的表上运行 VACUUM 是否值得?

在 2015 年的 re:Invent 演讲中,AWS 提到真空不仅应该在更新或删除之后运行,而且还应该在插入之后运行。这是谈话的相关部分:

http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s

据说即使块只收到插入,也必须对块进行一些清理,并且可以在第一次选择块时(减慢读取速度)或在真空期间进行清理。这是真的吗?如果是这样,究竟必须进行哪些清理工作?

postgresql performance vacuum postgresql-performance

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

当没有结果并且指定了 LIMIT 时,SELECT 非常慢

我遇到了一个问题,SELECT查询很慢,因为当最终结果的数量为 0并且LIMIT指定了一个子句时,它不使用索引。

如果结果数大于 0,则 Postgres 使用索引并在 ~ 1ms 内返回结果。据我所知,这似乎总是正确的。

如果结果数为 0 且没有LIMIT使用,则 Postgres 使用索引,结果在 ~ 1ms 内返回

如果结果数为 0 并且LIMIT指定了 a,则 Postgres 会执行顺序扫描,结果大约需要 13,000 毫秒。

为什么 PostgreSQL 在最后一种情况下不使用索引?

基数:

总计约 2100 万行。
~ 300 万行WHERE related_id=1
~ 300 万行WHERE related_id=1 AND platform=p1
2 行WHERE related_id=1 AND platform=p2
0 行WHERE related_id=1 AND platform=p3
~ 800 万行WHERE platform=p2

Postgres 版本:9.4.6

表架构:

CREATE TYPE platforms AS ENUM ('p1', …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index statistics postgresql-9.4 postgresql-performance

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