2017-07-03 67 views
3

我希望能够对绑定参数的查询执行explain语句。例如:如何在PostgrSQL中使用已准备的查询执行“解释”语句,该查询具有绑定参数?

EXPLAIN SELECT * FROM metasyntax WHERE id = $1; 

当我尝试执行此,我得到以下错误:

ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1 

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

是否有可能得到一个解释计划,而不绑定到实际值?谢谢!

+1

执行计划可能取决于参数的值:[示例](http://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=cd52792a97ce9c34bc3e9dfbce041292) – Abelisto

+0

编号允许优化器根据参数更改查询计划。 – Bohemian

回答

1

编号

允许优化器根据参数更改查询计划。试想一下,如果参数是null - 显然没有行将被返回,所以DB可能会立即返回空行集。

只需使用一个代表性值。

+0

正确。然而,您可以'PREPARE'计划,然后'解释执行myplan(params)',这可能有用。 –

1

假设参数是一个整数:

PREPARE x(integer) AS SELECT * FROM metasyntax WHERE id = $1; 

然后运行以下六个次,其中是代表值:

EXPLAIN (ANALYZE, BUFFERS) EXECUTE x(42); 

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

相关问题