我想知道如果我在PostgreSQL的准备语句,即:是否执行预先准备的声明中跳过规划阶段的PostgreSQL
PREPARE newquery(int) AS
SELECT * FROM table1 WHERE somefield > $1;
将后端调用解析分析和规划师,当我执行:
EXECUTE newquery(123);
我发现了一些documentation,它说的是PostgreSQL的“跳过”解析准备查询的分析和规划,并通过这样做,显著优化查询执行。
我试图通过覆盖post_parse_analyze_hook
和planner_hook
,并从他们简单地写一些东西到日志文件(即“计划被称为”)测试这一点,所以我可以看到,如果规划者和分析仪被调用。这种测试方法是否有效?
我很困惑,因为每次执行EXECUTE newquery(some number);
解析分析器和计划器都被调用。
我正在做这一切,因为我想要统计查询编译了多少次以便更好地理解“查询缓存”。
注意:我在一个会话中执行此操作。每次我连接到服务器时,我都会再次准备这些语句。
为什么计划和解析分析器被调用?
我想为'EXECUTE newquery(123);'调用解析分析器,'不适合查询下划线和计划器,因为查询计划可能取决于参数。好问题,但让我们等待更有经验的人。 – Abelisto