如果我创建一个将 m 行连接到每个 n 结果上的查询,我将得到总共 n * m 个结果行(每个结果都会加上 m 行)。
如果我通过网络连接, n * m 行是通过网络发送的,还是PostgreSQL软件足够聪明以更短的方式表示它? (即n1 *(m1,m2,m3)代替n1m1,n1m2,n1m3等)
答案 0 :(得分:1)
我认为简短的回答是 no 。
来自Postgres Message Flow doc:
在简单查询模式下,检索值的格式始终为文本, 除非给定的命令是来自声明的游标的FETCH BINARY选项。在这种情况下,检索的值是二进制的 格式。 RowDescription消息中给出的格式代码告诉 正在使用哪种格式。
对于扩展查询模式:
Bind还指定了用于返回的任何数据的格式 查询;格式可以整体指定,也可以按列指定。
关于 RowDescription 消息:
表示即将返回行以响应SELECT, FETCH等查询。此消息的内容描述了该列 行的布局。接下来是DataRow消息 每一行都返回到前端。
所以这种格式可以是二进制或纯文本,但我不相信你提到的任何类型的因式编码。也就是说,它将以指定格式列出所有列,在上述情况下将为(n1, n2, n3, m1, m2, m3)
。