是否有任何SQL数据库具有优化网络通信的提供程序,以便在多行中重复的列只向客户端发送一次?

是否有任何SQL数据库具有优化网络通信的提供程序,以便在多行中重复的列只向客户端发送一次?,sql,optimization,database-connection,query-optimization,Sql,Optimization,Database Connection,Query Optimization,考虑到市场上有大量SQL数据库,并且每个数据库都有自己的提供者,这些提供者以自定义的方式通过线路发送数据,这意味着实现自由,那么数据库是否在优化列,这些列的值对于许多连续行都是恒定的,以便每个组/每个值更改只发送一次列的值 既然SQL引擎可能拥有结果集中哪些列不会更改的信息,为什么每个组会发送这些信息不止一次 简单的例子: [种类]表 Id GroupId Name 1 1 Goat 2 1 Horse 3 1 Donkey 4 2

考虑到市场上有大量SQL数据库,并且每个数据库都有自己的提供者,这些提供者以自定义的方式通过线路发送数据,这意味着实现自由,那么数据库是否在优化列,这些列的值对于许多连续行都是恒定的,以便每个组/每个值更改只发送一次列的值

既然SQL引擎可能拥有结果集中哪些列不会更改的信息,为什么每个组会发送这些信息不止一次

简单的例子:

[种类]表

Id  GroupId Name
1   1       Goat
2   1       Horse
3   1       Donkey
4   2       Pine
[组]表

Id  Kingdom Description
1   Animals This is a very long description of animals group
2   Plants  This is ever longer description of plants group
现在进行以下查询:

SELECT s.*, g.Kingdom, g.Description FROM Species s JOIN Groups g ON g.Id = s.GroupId
将返回:

Id  GroupId Name    Kingdom Description
1   1       Goat    Animals This is a very long description of animals group
2   1       Horse   Animals This is a very long description of animals group
3   1       Donkey  Animals This is a very long description of animals group
4   2       Pine    Plants  This is ever longer description of plants group
即使不进入DB引擎级别,这种类似RLE的编码的实现也将是微不足道的——在发送和接收时只保留前一行,并为一个或多个列粘贴USE previous值

当我需要连接一个包含长BLOB型字段的表时,我想到了这个问题,该字段可以在结果集中出现多次;我正在使用Microsoft SQL Server


我的问题是,是否有数据库在其提供程序中进行类似的优化?我的想法是,总是由用户来构建查询,这样行就不会包含重复的信息,但当进行多个查询时,我们会遇到另一个问题,即再次遍历整个客户机-服务器管道。

我对此表示怀疑。结果集没有排序,除非查询具有order by。您可以通过将结果编码为JSON或XML来完成类似的事情。这取决于您的体系结构,而不是DBMS。@GordonLinoff是的,order by就是一个这样的分组实用的例子。联接的表列也会导致隐式排序,在某些情况下,查询结果的这种编码会显著减少带宽使用,并可能减少处理时间。@paqogomez这只是部分取决于体系结构,因为无法控制可以优化的DB提供程序的内部实现对用户透明。@too。我不知道您所说的联接表列会导致隐式排序是什么意思。重复三次:SQL表表示无序集。结果集是无序的,除非在查询的最外层有一个明确的order by。这里没有含糊不清的地方。这就是关系数据库的工作原理。