我正在努力优化我的功能

SELECT  map.get_near_link(a.X, a.Y, a.azimuth)
FROM traffic.avl;

第一次17赛格

Total query runtime: 17188 ms.
801 rows retrieved.

第二次11赛格

Total query runtime: 11406 ms.
801 rows retrieved.

我猜有某种缓存在幕后进行优化.

推荐答案

PostgreSQL没有"缓存"优化,即查询结果缓存.

它会缓存最近在shared_buffers中读取的表块,但对于大多数安装来说,这只会产生很小的影响.主缓存是操作系统的磁盘读缓存.有关更多信息,请参阅:

See and clear Postgres caches/buffers?

在我看来,你的系统有合理数量的RAM和快速的CPU,但磁盘速度非常慢.因此,只命中操作系统磁盘缓存的查询速度非常快,但进入磁盘的查询需要几秒钟才能读取数据.所以缓存效应非常强.

你应该回答你的问题.try 使用几个不同的输入值,直到得到一个较慢的值.比较计划.

如果计划是一样的,很可能就是这样.

如果计划不同,您可能遇到了这样一种情况:查询计划器根据表统计数据的变化做出错误的 Select .增加感兴趣的列的统计目标可能会有所帮助(请参阅手册).如果你有不同的计划,并且遇到困难/需要帮助,请随时在dba上发布新问题.斯塔克交换.com提供详细信息.

Postgresql相关问答推荐

"错误:无法创建用户:错误:关系\users\违反了非空约束

如何使用Docker安装PostgreSQL扩展

Postgres查询按月和年分组的总计数

在Postgres中,如何删除包含N个自然数的表,并替换为生成子查询?

Postgres 对 WHERE 子句并行使用两个索引

包含间隔在 jooq 和 postgres 中没有按预期工作

如何在 PostgreSQL 中使用正则表达式删除单词之间的所有特殊字符和多余空格

获取带有时区偏移的日期

在 Postgresql 中获取星期几

是否可以在 PostgreSQL 中部分刷新materialized视图?

PostgreSQL:如何安装 plpythonu 扩展

Postgis 中 2 点之间的距离,单位为 4326 米

如何删除 Postgres 上的所有数据库?

在 Postgresql 中按窗口函数结果过滤

带有偏移限制的 Select 查询太慢了

在 Windows 7 上更改/重置 postgresql 用户密码

我应该在 Django DATABASE ENGINE 中使用哪个 Postgres 值?

ruby on rails jsonb 列默认值

如何使用 PostgreSQL 在任何列中查找所有具有 NULL 值的行

Postgresql滚动删除旧行?