Ho una query, in generale, molto semplice e non capisco perché il piano di esecuzione effettivo mi mostra un avviso "No Join Predicate" subito dopo la selezione iniziale su un nodo "Nested Loops"."No Join Predicate" quando si aggiunge una condizione aggiuntiva - perché?
Penso che la query sia piuttosto auto-esplicativa: ho utenti e hanno UserSubscriptions ai Feed (m: n) - Voglio interrogare tutti i FeedItem da un Feed a cui l'utente deve essere iscritto, quindi questa query fa questo molto bene:
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
la parte interessante è che non v'è alcun avviso finché io lasciare fuori questa condizione:
and f.id = 3
appena rimuovo questo, l'avviso relativo alla mancanza predicato di join scompare . Non capisco la causa di questo avvertimento qui.
Qualsiasi aiuto per capire questo sarebbe molto apprezzato!
Grazie b.
qv http://dba.stackexchange.com/questions/34193/should-i-be-alarmed-by-this-no-join-predicate-warning e http://dba.stackexchange.com/questions/ 35082/what-exact-does-no-join-predicate-mean-in-sql-server - in breve, questo non è * automaticamente * una cosa negativa – AakashM
Ok per quanto ne so - nel mio caso SQL Server ottimizzerebbe il mio Join on Feed come condizione per Feed.Id = 3 rende il join inutile? Quindi questo è il motivo per cui non esiste più un predicato di join per questo tavolo? Ok, per quanto riguarda le prestazioni ... questo non dovrebbe essere un problema. Logicamente dovrò pensarci perché il Feed Join <-> UserSubscriptions è lì per filtrare qualsiasi Feed che l'Utente sia realmente sottoscritto in quanto non è detto che l'Utente sia iscritto al Feed con ID 3 in questo esempio. Grazie! –