Никогда не доверяйте Плану выполнения.Очень полезно, чтобы вы увидели, каким будет план, но если вам нужны реальные показатели, всегда включите статистику
set statistics io on
set statistics time on
.. и сравните фактические исполнения.Статистика может сказать, что ожидание составляет 15% / 85%, но фактические данные покажут вам, к чему это в действительности приводит.
Серебряной пули для настройки производительности не существуетДаже «лучшие» запросы могут со временем меняться по мере изменения формы или распределения ваших данных.
CTE не будет сильно отличаться, и я не уверен, как вы планируете выполнить запрос PARTITION по этому поводу,но вы можете попробовать форму left join
.
SELECT
gi.GalleryImageId,
gi.FbUserId,
count(v.GalleryImageId) AS Votes
FROM
GalleryImage gi
LEFT JOIN GalleryImageVote v ON v.GalleryImageId = gi.GalleryImageId
GROUP BY
gi.GalleryImageId, gi.FbUserId