SQL Server мне нужно два запроса и вопрос эффективности функции - PullRequest
2 голосов
/ 10 июня 2011

Я хочу получить список людей, связанных с блогом. Таблица [BlogAffiliates] имеет:

  • BlogID
  • UserID
  • Privelage

и если лица, связанные с этим блогом, имеют более низкий или равный уровень привилегии, они не могут редактировать [bit field canedit]

Этот запрос - самый эффективный способ сделать это или есть лучшие способы получить эту информацию?

Интересно, можно ли это сделать одним запросом?

Можно ли это сделать без этого преобразования более умным способом?

declare @privelage tinyint
select @privelage = (select Privelage from BlogAffiliates 
            where UserID=@UserID and BlogID = @BlogID)

select aspnet_Users.UserName as username,
   BlogAffiliates.Privelage as privelage,
       Convert(Bit, Case When @privelage> blogaffiliates.privelage 
                    Then 1 Else 0 End) As canedit 
from BlogAffiliates, aspnet_Users 
where BlogAffiliates.BlogID = @BlogID and BlogAffiliates.Privelage >=2 
        and aspnet_Users.UserId = BlogAffiliates.UserID

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Вы можете попробовать ниже запрос.

Select aspnet_Users.UserName as username, Blog.Privelage as privelage,
Convert(Bit, Case When @privelage> Blog.privelage 
    Then 1 Else 0 End) As canedit 
From
(
    Select UserID, Privelage
    From BlogAffiliates
    Where BlogID = @BlogID and Privelage >= 2
)Blog
Inner Join aspnet_Users on aspnet_Users.UserId = Blog.UserID

Насколько я понимаю, вы не должны использовать переменную таблицы , если вы объединяете ее с другой таблицей. Это может снизить производительность . Но в случае, если записи меньше, то вам стоит пойти на это. Для этой цели вы также можете использовать Локальные временные таблицы .

0 голосов
/ 10 июня 2011

Часть этого будет зависеть от индексов и размера используемых таблиц.Например, если ваша самая дорогая часть запроса при профилировании была поиском по столбцу «BlogAffiliates.BlogID», то вы можете сделать один выбор в табличной переменной и затем выполнить оба вычисления оттуда.

Однако я думаю, что, скорее всего, заданный вами запрос будет наиболее эффективным.Единственное возможное дублирование работы - вы дважды ищете в полях «BlogAffiliates.BlogID» из-за двух запросов.

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