0
我有一个包含exists子句的sql查询。以前有两个表之间的内部连接,但由于一些新的条件,我用存在子句替换了内部连接。下面是我的查询 -如何用sql server exists子句做优化?
SELECT id,
Count(id) AS 'ItemCount'
FROM table1 t1
WHERE (EXISTS(SELECT DISTINCT messageid
FROM table2 t2
WHERE t2.messageid = t1.chatmessageid
AND t2.receiverid = 'xyzo-1234'
AND t2.groupid = 'wxfx-1234'
AND (t1.userid = 'ttew-3457'
OR t1.userid IS NULL))
OR (t1.userid = 'ttew-3457'))
AND (t1.machineid != 'C34F-A609')
AND (t1.createdtime > '2016-07-20 :: 07:21:51.9118534')
AND (t1.createdtime <= '2016-07-27 :: 13:25:30.1016155')
AND (t1.groupid = 'wxfx-1234')
GROUP BY t1.id
ORDER BY t1.id
但这种查询花费多一点的时间比以前的查询,我想优化它更多。任何人都可以建议我如何更优化此查询?
那么,对于初学者来说'DISTINCT'在'EXISTS'中是没有意义的,因为它所关心的是0行和0行以上的区别。 –
'EXISTS(... OR t1.UserId IS NULL' - 你确定吗? –
如果你有可以有NULL值的列,用类似'isnull(t1.UserId,'')' – xdd