首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尺寸大幅度缩小后小型工作台性能慢

尺寸大幅度缩小后小型工作台性能慢
EN

Stack Overflow用户
提问于 2015-12-15 11:51:02
回答 1查看 816关注 0票数 1

我有大约1000万行的表,id列是primary key

然后删除所有行where id > 10。只有10行保留在表中。

现在,当我运行查询SELECT id FROM tablename时,执行时间大约为1.2-1.5秒。

但是SELECT id FROM tablename where id = x只需要10-11毫秒.

为什么第一个SELECT只运行10行就这么慢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 12:24:32

主要原因是Postgres的MVCC模型,其中删除的行被保留,直到系统能够确保事务不会回滚,死行不再对任何并发事务可见。只有这样,死行才能被VACUUM --或者更根本的VACUUM FULL --物理地删除。

相关信息:

您的简单查询SELECT id FROM tablename --如果在DELETE之后立即运行,在自动真空可以启动之前--仍然可以找到1000万行,并且必须检查可见性,但只排除了其中的大多数行。

第二个查询SELECT id FROM tablename where id = x可以使用主键索引,只需要从(以前)大表中读取单个数据页。这种查询在很大程度上不受表的总大小的影响。

可能有一种更有效的方法来删除几乎所有的1000万行:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34288512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档