Может ли кто-нибудь помочь мне понять план выполнения SQL Server для следующих запросов?SQL Server скалярная функция против анализа плана выполнения подзапроса
Я ожидал, что версия подзапроса (Query 2) будет выполняться быстрее, потому что она основана на наборе. Это, кажется, тот случай, когда стереосистеме и обновите запросы самостоятельно - незначительно - однако план выполнения показывает затраты запроса в 15% против 85% соответственно:
//-- Query 1 (15%) - Scalar Function
SELECT
gi.GalleryImageId,
gi.FbUserId,
dbo.GetGalleryImageVotesByGalleryImageId(gi.GalleryImageId) AS Votes
FROM
GalleryImage gi
//-- Query 2 (85%) - Subquery
SELECT
gi.GalleryImageId,
gi.FbUserId,
(SELECT COUNT(*) FROM GalleryImageVote WHERE GalleryImageId = gi.GalleryImageId)
FROM
GalleryImage gi
Что я здесь отсутствует; ли план выполнения пропускает стоимость функции? Кроме того, какие-либо предложения относительно того, лучше ли обслуживать любой из вышеперечисленных вопросов с запросом CTE или OVER/PARTITION?
Спасибо заранее!
У вас есть они оба в том же окне редактора запросов? Поскольку анализатор запросов будет сравнивать их и присваивать каждому относительное значение тому, что находится в окне (15%/85%). – JNK
Да, вот откуда взялись значения% :) – Robarondaz
Время выполнения запроса не всегда равно стоимости. Кажется, что SQL Server увеличивает загрузку процессора и памяти выше, чем на жестком диске. – jahu