我正在对Postgres数据库进行大量测试......
所以基本上我有2个表,我在其中插入了40.000.000个记录,比如说table1和80.000.000在table2上
之后我删除了所有这些记录。
现在如果我做SELECT * FROM table1需要199000毫秒?
我无法理解发生了什么?
任何人都可以帮我吗?
答案 0 :(得分:7)
如果删除表中的所有行,则会将它们标记为已删除,但不会立即从磁盘中删除。为了删除它们,你需要进行“真空”操作 - 这应该在这么大的删除后一段时间自动启动。即便如此,这只会让页面空白但占用相当多的磁盘空间而不会“真空充满”。
如果您经常需要删除大表中的所有行,请考虑使用“truncate”,它只是简单地删除表数据文件。
答案 1 :(得分:3)
元组在逻辑上被删除,而不是fisically。 您应该在db上执行VACUUM。 More info here
答案 2 :(得分:0)
如果要删除所有记录,请使用truncate not delete。此外,第一次运行它时,关系将不会被缓存(文件缓存或共享缓冲区),因此它将比后续时间慢。