Announcement

Collapse
No announcement yet.

mySQL Performance bei Joins

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mySQL Performance bei Joins

    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:
    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
    ;
    B:
    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
    ;
    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.

  • #2
    Wow, noch keine Antworten! Ist die Frage zu komisch oder kompliziert?

    Jetzt fühl ich mich schlecht...

    Comment

    Working...
    X