Hi,
ich habe folgende Fragestellung und hoffe jemand kann mir mit etwas Fachwissen oder Erfahrung weiterhelfen.
Im Grunde möchte ich nur wissen, welches der beiden Vorgehen bei einer größeren Abfrage performanter ist.
A: viele Left/Right Joins mit genaueren Bedingungen
oder
B: einen Join auf die entsprechende Tabelle und die Bedingungen in entsprechenden Aggregat-Funktionen.
Klingt vlt. etwas komisch, aber so in etwa sähen die Varianten aus:
A:
B:
Hypothetisch würde ich sagen Variante A erscheint einfacher, weil man am Ende weniger Tabellen im Pool hat. Aber wenn man so viele einzelne Joins hat, das man das LIMIT vom SQL-Server sprengt, ist das auch nicht vorteilhaft.
Vielleicht kennt auch jemand ne dritter Alternative.
Für jede Hilfe schonmal Danke im Vorraus.
Grüße
M
PS: Achso, das Ganze findet zwischen PHP 5.2.6 und MySQL 5.0.51 statt.
ich habe folgende Fragestellung und hoffe jemand kann mir mit etwas Fachwissen oder Erfahrung weiterhelfen.
Im Grunde möchte ich nur wissen, welches der beiden Vorgehen bei einer größeren Abfrage performanter ist.
A: viele Left/Right Joins mit genaueren Bedingungen
oder
B: einen Join auf die entsprechende Tabelle und die Bedingungen in entsprechenden Aggregat-Funktionen.
Klingt vlt. etwas komisch, aber so in etwa sähen die Varianten aus:
A:
Code:
SELECT IF(COUNT(x.id), 1, 0), IF(COUNT(y.id), 1, 0), IF(COUNT(z.id), 1, 0), FROM table1 a LEFT JOIN table2 x ON bedingungen A LEFT JOIN table2 y ON bedingungen B LEFT JOIN table2 z ON bedingungen C ;
Code:
SELECT IF( COUNT(DISTINCT IF( bedingung X, b.id, NULL ), 1, 0 ), IF( COUNT(DISTINCT IF( bedingung Y, b.id, NULL ), 1, 0 ), IF( COUNT(DISTINCT IF( bedingung Z, b.id, NULL ), 1, 0 ), FROM table1 a LEFT JOIN table2 b ON einfache_bedingung ;
Vielleicht kennt auch jemand ne dritter Alternative.
Für jede Hilfe schonmal Danke im Vorraus.
Grüße
M
PS: Achso, das Ganze findet zwischen PHP 5.2.6 und MySQL 5.0.51 statt.
Comment