SqlServer 2008 Требуется предложение для оптимизации моего запроса и того, какое поле индексируется в таблице

у меня есть этот запрос

select count(distinct user1_.Id) as col_0_0_ from [FriendCloseness] friendclos0_ inner join [User] user1_ on friendclos0_.User_id=user1_.Id where dateadd(d, 0, datediff(d, 0, friendclos0_.LastUpdate))=@p0 and friendclos0_.IsInvited=1 and user1_.IsDeleted=0 and user1_.Sex=@p1 

таблица Пользовательское соединение с запросом FriendCloseness с полем FriendClossness LastUpdate, IsInvited, полем пользователя IsDeleted, Sex, где

таблица Пользовательская структура, связанная с запросом

Идентификатор пользователя, (первичный ключ) IsDeleted, Пол,

FriendClossness Id, (первичный ключ, будет ли СУБД автоматически устанавливать индекс на первичный ключ?) LastUpdate (datetimeoffset), IsInvited, User_id (внешний ключ)

Я задаюсь вопросом, какое поле мне нужно индексировать, и я хочу удалить функцию даты, создав новое поле «InviteDate» для хранения только даты


person embarus    schedule 24.04.2013    source источник


Ответы (1)


Попробуй это -

SELECT col_0_0_ = COUNT(DISTINCT u.Id)
FROM (
    SELECT u.Id
    FROM dbo.[User] u
    WHERE u.IsDeleted = 0 
        AND u.Sex = @p1
    --GROUP BY u.Id
) u
JOIN (
    SELECT 
          f.[user_id]
        , LastUpdate = DATEADD(DAY, 0, DATEDIFF(DAY, 0, f.LastUpdate))
    FROM dbo.[FriendCloseness] f
    WHERE f.IsInvited = 1 
) f ON f.[user_id] = u.Id
WHERE f.LastUpdate = @p0 
person Devart    schedule 24.04.2013
comment
Это работает отлично, Деварт, но мне интересно, почему вы помещаете Group в первый подзапрос, я удаляю его и получаю тот же результат. - person embarus; 24.04.2013
comment
Группировка должна была уменьшить количество JOIN и, теоретически, немного повысить производительность. Я сделал это грубо, потому что не знал отношений между таблицами. В случае, если это решение подходит вам, я был бы рад, если бы вы могли подтвердить его. - person Devart; 24.04.2013
comment
Большое спасибо @Devart Да благословит вас Бог. - person embarus; 24.04.2013
comment
Спасибо, что сообщили мне об этом. - person Devart; 24.04.2013