Moin,
ich hab ein Query bekommen, welches aus 4 unions besteht, was ich etwas sehr langsam fand. Daher wollte ich das einfach mal so umbauen, dass die unions wegfallen. Könnte von euch wohl mal jemand drüber schauen ob beide Querys immer noch das selbe machen oder ob ich bei meinem Umbau irgendwas übersehen habe (vier Augen sehen bekanntlich mehr als 2):
Hier das alte Statement:
Und hier das neue Query
Die müssten ja von der Logik her eigentlich identisch sein, oder hab ich da was übersehen?
ich hab ein Query bekommen, welches aus 4 unions besteht, was ich etwas sehr langsam fand. Daher wollte ich das einfach mal so umbauen, dass die unions wegfallen. Könnte von euch wohl mal jemand drüber schauen ob beide Querys immer noch das selbe machen oder ob ich bei meinem Umbau irgendwas übersehen habe (vier Augen sehen bekanntlich mehr als 2):
Hier das alte Statement:
Code:
select count(*) as anzahl from (
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and b.referenz = 'ABC123')
and a.erledigt = 0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and b.sammelreferenz = '123ABC')
and a.erledigt = '0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and contains(b.verwendungszweck, 'ABC123', 1) > 0)
and a.erledigt = 0
union
select distinct id from t1 a
where exists (select * from t2 b where a.id = b.id and contains(b.verwendungszweck, '123ABC', 1) > 0)
and a.erledigt = 0
);
Und hier das neue Query
Code:
SELECT COUNT(*) as anzahl FROM(
SELECT DISTINCT * FROM t1
INNER JOIN t2
ON t1.id = t2.id
WHERE
(
t2.referenz = 'ABC123'
or t2.sammelreferenz = '123ABC'
or contains(t2.verwendungszweck, 'ABC123') > 0
or contains(t2.verwendungszweck, '123ABC') > 0
)
and t1.erledigt = 0
);
Die müssten ja von der Logik her eigentlich identisch sein, oder hab ich da was übersehen?