私は一般的に非常に単純なクエリを持っていて、実際の実行計画が "Nested Loops"ノードの最初の選択の直後に "Join Join Predicate"という警告を表示する理由を理解していません。追加の条件を追加するときに「結合述語がありません」 - なぜですか?
私はユーザーがいて、UserSubscriptions to Feeds(m:n)を持っています。ユーザーが購読するフィードからすべてのFeedItemを照会したいので、このクエリはこれを行います非常によく:
select fi.Title, fi.Content, fi.Published
from [User] u
inner join UserSubscription us on u.id = us.UserId
inner join Feed f on f.id = us.FeedId
inner join FeedItem fi on fi.FeedId = f.Id
where u.EMailAddress = '[email protected]'
and f.id = 3
and fi.Inserted > getdate() - 30
興味深い部分は何の警告がいる限り、私はこの条件を除外ようがないことである。
and f.id = 3
できるだけ早く私はこれを削除するよう、不足している結合述語が消滅に関する警告。私はここでこの警告の原因を理解していません。
これをご理解いただきありがとうございます。
ありがとう b。
qv http://dba.stackexchange.com/questions/34193/should-i-be-alarmed-by-this-no-join-predicate-warningおよびhttp://dba.stackexchange.com/questions/ 35082/what-exactly-does-no-join-predicate-mean-in-sql-server - 要するに、これは自動的に*悪いことではない – AakashM
私が理解する限り - 私の場合、SQL Serverは最適化するFeed.Id = 3のための私の条件として、私のJoin on Feedを参加させることは不必要ですか?だからこそ、このテーブルの結合述語はもうないのですか?確かに、パフォーマンスに賢明...それは本当に問題ではありません。論理的には、これについて考える必要があります。なぜなら、Join Feed <-> UserSubscriptionsは、この例では、ユーザーがID 3のフィードに登録されているとは言われないので、ユーザーは実際に購読しています。ありがとう! –