如何在具有绑定参数的PostgrSQL中使用准备好的查询执行“ Explain”语句?

Jas*_*son 5 postgresql

我希望能够在具有绑定参数的查询上执行解释语句。例如:

EXPLAIN SELECT * FROM metasyntax WHERE id = $1;
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此操作时,出现以下错误:

ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
Run Code Online (Sandbox Code Playgroud)

我了解它告诉我它希望我为查询提供一个值。但是,我不一定知道答案。在其他SQL方言(例如Oracle)中,它将生成解释计划,而无需我提供参数值。

是否可以在不约束实际值的情况下获得解释计划?谢谢!

Lau*_*lbe 7

假设参数是一个整数:

PREPARE x(integer) AS SELECT * FROM metasyntax WHERE id = $1;
Run Code Online (Sandbox Code Playgroud)

然后运行以下六次,其中“42”为代表值:

EXPLAIN (ANALYZE, BUFFERS) EXECUTE x(42);
Run Code Online (Sandbox Code Playgroud)

通常 PostgreSQL 将切换到第六次运行的通用计划,您将看到一个包含占位符的计划$1


Boh*_*ian 4

不。

优化器可以根据参数更改查询计划。想象一下,如果参数是null- 显然不会返回任何行,因此数据库可能会立即返回一个空行集。

只需使用一个代表值即可。