использование объединений, а не подзапросов в SQL Server - PullRequest
1 голос
/ 17 апреля 2011

Привет, ребята. У меня со мной следующие таблицы отношений,

enter image description here

и я пишу следующий вложенный запрос в своей хранимой процедуре

. Select useremail,fullname,city,[state], allowAlerts,allowLetters,aboutMe,avatar,dateregistered,
          (Select COUNT(*) from blog_info where blog_info.userId = @userId)as blogCount,
           (Select count(*) from blog_info where blog_info.isfeatured = 1 AND blog_info.userId = @userId)as featuredCount,
           (Select COUNT(*) from blog_comments where blog_comments.userId = @userId)as commentsCount,
            (Select COUNT(*) from forum where forum.createdby = @userId) as forumCount,
             (Select COUNT(*) from forumresponse where forumresponse.userId = @userId)as responseCount 

          from user_info where _id = @userId.

я хочу заменить этот вложенный запрос на запрос, который использует Joins.

Просьбы Помогите мне достичь этого.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 17 апреля 2011

альтернативой может быть запуск всех этих подзапросов count и сохранение в отдельных переменных SP. Вы пробовали это, чтобы увидеть, если это более эффективно, чем несколько подзапросов с точки зрения кэширования и т. Д.

1 голос
/ 17 апреля 2011
select
    u.useremail,
    u.fullname,
    u.city,
    u.[state],
    u.allowAlerts,
    u.allowLetters,
    u.aboutMe,
    u.avatar,
    u.dateregistered,
    isnull(ub.blogCount,0) blogCount,
    uf.featuredCount,
    uf2.forumCount,
    ur.responseCount 
from
    user_info u
left outer join 
    (select userid, count(*) blogCount from blog_info group by userid) ub on ub.userid = u._id

(и т. Д. Выполняется аналогичное объединение для каждого подзапроса, который у вас был изначально)

where
    u._id = @userId

Извините за бесполезное форматирование!

Примечание: механизм запросов, вероятно, достаточно умен, чтобы использовать один и тот же план выполнения для обоих запросов, поэтому улучшение не обязательно будет

1 голос
/ 17 апреля 2011

Вы пытались вставить этот запрос и выделить его в Редактор запросов, затем нажмите кнопку панели инструментов конструктора запросов? Management Studio откроет запрос в Query Designer, переписав его в терминах объединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...