Может ли кто-нибудь объяснить это поведение или как его обойти?
Если вы выполните этот запрос:
select *
from TblA
left join freetexttable ( TblB, *, 'query' ) on TblA.ID = [Key]
inner join DifferentDbCatalog.dbo.TblC on TblA.ID = TblC.TblAID
Это будет очень-очень медленно.
Если вы измените этот запрос, чтобы использовать два внутренних соединения вместо левого соединения, это будет очень быстро. Если вы измените его, чтобы использовать два левых соединения вместо внутреннего соединения, это будет очень быстро.
Вы можете наблюдать такое же поведение, если вы используете переменную таблицы sql вместо freetexttable.
Проблема с производительностью возникает всякий раз, когда у вас есть табличная переменная (или freetexttable) и таблица в другом каталоге базы данных, где одна находится во внутреннем соединении, а другая — в левом соединении.
Кто-нибудь знает, почему это медленно, или как ускорить его?