2017-06-15 17 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

@サンティ、それを編集してください。私の英語は、より正確なことはあまり良くありません。 – MuriloKunze

答えて

1

これは、データを複製します。

オーバー・ザ・ワイヤ・ツールを使用して、このようなパフォーマンス分析を実行するときにサーバーとクライアント間で転送される内容を正確に確認できます。

+0

ありがとうございます。これを避けるにはどうすればよいか知っていますか? – MuriloKunze

0

すべての結果は、サーバーからクライアントに行/列形式で送信されます。これは、SQL Server APIの中で何年も何年も標準化されており、変更することはできません。クライアントがすべてのデータを一度にクライアントに送信することなく、結果セットを一度に1行ずつクライアント側でトラバースできるように設計されています。

SQL Serverの内部動作の変更に関する懸念は、おそらく時間の無駄です。あなたが言及したように(重複していない)「重複」に本当の問題がある場合、それはネットワークレベルで対処されるかもしれません。

関連する問題