Ich habe eine SQL-Abfrage, die die Klausel existiert enthält. Zuvor gab es eine innere Verbindung zwischen zwei Tabellen, aber aufgrund einer neuen Bedingung ersetze ich Inner Join mit der exists-Klausel. Im Folgenden finden Sie meine Frage -Wie wird die Optimierung mit der Klausel sql server exists durchgeführt?
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
Aber diese Abfrage etwas mehr Zeit als die vorherige Abfrage nimmt und ich mag es mehr optimieren. Kann mir jemand vorschlagen, wie ich diese Abfrage optimieren kann?
Nun, für Anfänger ist 'DISTINCT' sinnlos innerhalb eines' EXISTS', da es nur auf die Unterscheidung zwischen 0 Zeilen und mehr als 0 Zeilen ankommt. –
'EXISTS (... ODER t1.UserId ist NULL' - bist du sicher? –
Wenn Sie Spalten haben, die NULL-Wert haben können, schreiben Sie mit so etwas wie 'isnull (t1.UserId,' ')' – xdd