2017-06-15 40 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如何在內部工作的擔憂可能會浪費您的時間。如果您提到的「重複」存在真正的問題(誤稱),則可能會在網絡級別解決。