代码之家  ›  专栏  ›  技术社区  ›  Thilo

PostgreSQL小表顺序扫描速度慢

  •  1
  • Thilo  · 技术社区  · 15 年前

    我在PostgreSQL中有一个表需要读入内存。这是一个非常小的表,只有三列和200行,我只做了一个 select col1, col2, col3 from my_table 总的来说。

    在开发机器上,这是非常快的(不到1毫秒),即使该机器是Mac OS文件保险库中的一个虚拟箱。

    但在生产服务器上,它始终需要600毫秒。生产服务器的规格可能较低,数据库版本也较旧(7.3.x),但我认为单凭这一点无法解释巨大的差异。

    在这两种情况下,我都在跑步 explain analyze 在数据库服务器上,所以它不能是网络开销。在这两种情况下,查询执行计划都是一个简单的顺序完整表扫描。当时生产机器上也没有其他事情发生,所以争用也没有了。

    怎么知道为什么这么慢,我该怎么办?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Magnus Hagander    15 年前

    听起来好像你没有正确地清空这个数据库?7.3是 方式 太老了,不能自动真空,所以这是您必须手动做的事情(cron作业是推荐的)。如果您对此表进行了许多更新(随着时间推移),但没有运行真空,则访问速度将非常慢。

        2
  •  2
  •   user80168    15 年前

    显然是桌子膨胀。对有问题的桌子进行真空分析。还有-升级。7.3甚至不再受支持。

        3
  •  0
  •   chburd    15 年前

    如果多次运行查询,会发生什么情况? FISRT运行应该很慢,但其他的应该更快,因为第一次执行会将数据放入缓存中。

    顺便说一句:如果你选择…从没有任何限制开始,使用seq扫描是100%正常的,必须使用seq扫描来检索值,而且由于使用了限制,因此不需要执行索引扫描。

    不要犹豫,发布您的解释分析查询的结果。

    PostgreSQL 7.3真的很旧,没有升级到更现代的版本的选择吗?