【发布时间】:2018-11-13 16:52:41
【问题描述】:
假设你准备了三个 NpgsqlCommands。因为它们必须分开执行。但有时必须同时执行两个或所有三个(嗯,一个接一个)。
有没有办法通过单次往返服务器来批处理和重用这些先前准备好的命令? (目标是尽量减少延迟)
现在我使用第四个命令和分号分隔原始三个命令的副本,并准备这个 - 但我假设这将在服务器上使用更多资源,并在 npgsql 客户端使用更多 SQL 解析。
【问题讨论】:
标签: npgsql
假设你准备了三个 NpgsqlCommands。因为它们必须分开执行。但有时必须同时执行两个或所有三个(嗯,一个接一个)。
有没有办法通过单次往返服务器来批处理和重用这些先前准备好的命令? (目标是尽量减少延迟)
现在我使用第四个命令和分号分隔原始三个命令的副本,并准备这个 - 但我假设这将在服务器上使用更多资源,并在 npgsql 客户端使用更多 SQL 解析。
【问题讨论】:
标签: npgsql
Npgsql 通过在 CommandText 中包含多个语句来支持批处理,用分号分隔。这些在单个网络往返中执行,也可以准备:
cmd.CommandText = "SELECT ...; UPDATE ...";
cmd.Prepare();
在内部,Npgsql 将这些命令用分号拆分,并分别准备每个语句(PostgreSQL 实际上并不识别批处理,只识别单个语句)。此外,Npgsql 在逐个语句级别上管理准备好的语句,并且知道重用已经存在的语句。这意味着如果您准备两个包含相同语句的命令,这些语句将共享相同的服务器端准备语句资源。
【讨论】: