2013-04-24 68 views
0

我有这个疑问与FriendCloseness 与FriendClossness场LASTUPDATE查询,IsInvited, 用户现场请将isDeleted,性别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))[email protected] and friendclos0_.IsInvited=1 and user1_.IsDeleted=0 and [email protected] 

表用户加入其中

表用户结构与查询

用户 编号,(主密钥) 涉及请将isDeleted, 性别,

FriendClossness 标识,(主键,会自动DBMS设置索引到主键?) LASTUPDATE(DATETIMEOFFSET), IsInvited, USER_ID(外键)

wounder哪个领域我需要索引我想通过创建新字段“InviteDate”来删除日期函数来存储日期

回答

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 
+0

它完美的工作,Devart,但我想知道为什么你把Group by在第一个子查询中删除它,并得到相同的结果。 – embarus 2013-04-24 10:48:13

+1

这个分组应该减少了JOIN的数量,理论上一些增加了性能。我粗略地做了,因为我不知道表格之间的关系。如果这个解决方案适合你,如果你能确认它,我会很高兴。 – Devart 2013-04-24 11:30:36

+0

非常感谢你@Devart愿上帝保佑你。 – embarus 2013-04-24 11:54:15