Vinzenz Mai: Query Laufzeit verbessern

Beitrag lesen

Hallo Marc,

Folgendes Problem: Ich habe zwei Tabellen (A und B) mit einer größeren Anzahl von Einträgen (A ~ 20.000 und B ~ 100.000).

unproblematisch

Nun möchte ich gerne, geknüpft an einige Bedingungen, eine Trefferanzahl für jede Spalte auszählen lassen (also wieviele Wert ungleich NULL gibt es).

Das verstehe ich nicht. Bitte konkret anhand von Beispieldaten erläutern, welches Ergebnis Du haben möchtest - und warum das Ergebnis so aus den Ausgangsdaten folgt.

Das Problem hierbei ist, dass ein JOIN über diese beiden Tabellen schon ausgesprochen lange dauert. Nun frage ich mich, ob ich auf effektive Weise um diesen JOIN herum komme.

Nutze EXPLAIN, um zu ermitteln, warum dieser einfache Join zweier nicht allzu umfangreicher Tabellen lange dauert.

Um es etwas zu konkretisieren:

das ist alles andere als konkret.

Den Einträgen in Tabelle A sind jeweils (über die EintragsID) einer oder mehrere Einträge aus B zugeordnet.

SELECT COUNT(*) as cGesamt, COUNT(b.Name) as cName, ... FROM A as a RIGHT JOIN B as b ON b.PersonenID = a.ID WHERE a.gehalt > 1000 AND b.Status >= 2

Deine Query passt nicht zu Deiner Beschreibung.

Gibt es Personen, denen _keine_ Einträge in B zugeordnet sind.
Wenn nein, verwende einen INNER JOIN.
Wenn ja, interessieren Dich diese Personen.
Wenn nein, verwende einen INNER JOIN
Wenn ja, verwende einen LEFT und keinen RIGHT JOIN.

Korrigiere Dein Statement, danach nutze EXPLAIN. Es könnte ein Problem mit Indizes vorliegen.

Freundliche Grüße

Vinzenz