2017-06-15 71 views
0

我在读'数据关系'(https://msdn.microsoft.com/en-us/library/ms810294.aspx),我对它是如何工作感到困惑。例如,sql server在返回上面的结果时是否复制了数据,还是以任何智能的方式返回以避免冗余?对网络流量的担忧

create table #category(Id int, Name varchar(100)) 
create table #product(Id int, Name varchar(100), CategoryId int) 

insert into #category values (1, 'category 1') 

insert into #product values (1, 'Product 1', 1) 
insert into #product values (2, 'Product 2', 1) 
insert into #product values (3, 'Product 3', 1) 
insert into #product values (4, 'Product 4', 1) 
insert into #product values (5, 'Product 5', 1) 

select * from #product left join #category on #product.categoryid = #category.id 

enter image description here

+0

这是数据库101.您正将'category'表加入到您的'product'表中。你对每个产品都有相同的'categoryid',所以你的'category.name'对于每个产品都是一样的。你还会期待它呢?这不是“重复数据”。这是该唱片产品的类别名称。 – JNevill

+1

@JNevill我在理解OP的问题时更加关注SQL在返回重复数据时的效率,仅仅作为一个例子。尽管个人而言,我对任何一个方向都不太自信 - 这个问题当然可以从一些澄清中受益。 – Santi

+0

@Santi请编辑它。我的英语不是很好,更准确。 – MuriloKunze

回答

1

它将复制数据。

在执行诸如此类的性能分析时,您可以使用over-the-wire工具准确查看服务器和客户端之间正在传输的内容。

+0

谢谢。你知道我该如何避免这种情况? – MuriloKunze

0

所有结果都以行/列格式从服务器发送到客户端。它已经在SQL Server API中以这种方式标准化了多年,并且无法更改。它旨在允许在客户端一次遍历结果集,而不必一次将所有数据发送到客户端。

有关修改SQL Server如何在内部工作的担忧可能会浪费您的时间。如果您提到的“重复”存在真正的问题(误称),则可能会在网络级别解决。