ビューのパフォーマンスに問題があります。具体的には、必要のないときに高価な結合が実行されています。この問題を最も単純なケースに絞り込み、AdventureWorks サンプル データベースを使用して、人物の名前と電子メール アドレスをまとめた次のビューを作成しました。
create view PersonDetails_View
as
select P.FirstName, P.LastName, A.EmailAddress
from Person.Person P
left outer join Person.EmailAddress A
ON P.BusinessEntityID = A.BusinessEntityID
このビューに対して次のクエリを実行すると:
select FirstName from PersonDetails_View
生成されるクエリは、次のものと同じです。
select P.FirstName
from Person.Person P
left outer join Person.EmailAddress A
ON P.BusinessEntityID = A.BusinessEntityID
このクエリでは、不要な結合が実行されています。なぜそれが起こっているのか知っています -行EmailAddress
ごとに複数のエントリがある場合Person
、結果は異なります。ただし、この特定のケースでは、マッピングは 1-1 であり、常にそうなります。生成されたクエリが次のようになるように、この結合が発生しないようにする方法はありますか?
select P.FirstName
from Person.Person P
(この単純なケースはマイクロ最適化のように見えますが、私の状況ではパフォーマンスの問題として、ビュー内の不要な結合を適切にプロファイリングして特定しました - 約束します!)