mysql - 2 Queries oder doch eine?
bearbeitet von
Hallo Jörg,
d.h. wenn m.Del den Wert 1 hat, kannst Du auf alle drei LEFT JOIN Ergebnisse verzichten, brauchst aber die Werte aus der m-Tabelle trotzdem?
ON kann mehr als nur die Keys verknüpfen. Probier's mal so:
~~~sql
SELECT
m.ID,
usw.
FROM
table1 m
LEFT JOIN table2 dg ON m.Del != 1 AND dg.ID = m.ID AND dg.del != 1
LEFT JOIN table3 s ON m.Del != 1 AND s.ID = m.ID
LEFT JOIN table4 mn ON m.Del != 1 AND mn.MID = s.MID AND mn.MID = 4780
WHERE
m.ID IN(1094,1095)
~~~
Man müsste Explains laufen lassen, um zu prüfen, ob die Reihenfolge der Abfragen im ON eine Relevanz für den Query-Plan hat oder ob die DB das sinnvoll optimiert. Zumindest im dritten LEFT JOIN wäre es nämlich sinnvoll, bei s.MID != 4780 gar nicht erst die Tabelle anzugucken, und wenn der Server strikt von links nach rechts abfragt, wäre
`ON m.Del != 1 AND s.MID = 4780 AND mn.MID = s.MID`
wohl performanter. Das kann man aber vermutlich nur mit einer großen DB und einer wilden Abfrage auf zufällige Daten wirklich feststellen.
_Rolf_
--
sumpsi - posui - obstruxi
mysql - 2 Queries oder doch eine?
bearbeitet von
Hallo Jörg,
d.h. wenn m.Del den Wert 1 hat, kannst Du auf alle drei LEFT JOIN Ergebnisse verzichten, brauchst aber die Werte aus der m-Tabelle trotzdem?
ON kann mehr als nur die Keys verknüpfen. Probier's mal so:
~~~sql
SELECT
m.ID,
usw.
FROM
table1 m
LEFT JOIN table2 dg ON m.ID = dg.ID AND m.Del != 1 AND dg.del != 1
LEFT JOIN table3 s ON s.ID = m.ID AND m.Del != 1
LEFT JOIN table4 mn ON mn.MID = s.MID AND m.Del != 1 AND mn.MID = 4780
WHERE
m.ID IN(1094,1095)
~~~
_Rolf_
--
sumpsi - posui - obstruxi