AllesMeins: Query Laufzeit verbessern

Beitrag lesen

Hi,

ich fürchte ich sehe hier den Wald vor lauter Bäumen nicht (bzw. bräuchte eine Bestätigung, dass ich nichts gravierendes übersehen habe).

Folgendes Problem: Ich habe zwei Tabellen (A und B) mit einer größeren Anzahl von Einträgen (A ~ 20.000 und B ~ 100.000). Den Einträgen in Tabelle A sind jeweils (über die EintragsID) einer oder mehrere Einträge aus B zugeordnet. Einzelne Zellen in den Tabellen können den Wert NULL haben.
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). Meine Ansatz war einfach die beiden Tabellen per LEFT JOIN zu verbinden, per WHERE die gewünschten Ergebnisse rauszufiltern und ein COUNT() über die einzelnen Spalten zu machen.
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.

Um es etwas zu konkretisieren:

Tabelle A enthält Personendaten (sagen wir ID, Name, Gehalt, Zimmer) und in Tabelle B sind diesen Personen verschiedene Aufgaben (mit eintsprechenden Zusatzdaten) zugeordnet (also für unser Beispiel PersonenID, Name, Status, Deadline). Abgesehen von ID undn PersonenID können alle diese Felder auch den wert "NULL" haben. Nun möchte ich gerne auszählen wieviele Einträge ungleich NULL es für jede einzelne Spalte der Tabelle B gibt. Und das nur für Datensätze bei denen Gehalt größer als 1000 ist und der Status mindestens den Wert 2 hat. Derzeit mit JOIN sieht es etwa so aus

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

Wie gesagt, der JOIN braucht deutlich zu lange. Mir fällt aber auch keine bessere Möglichkeit ein (außer vielleicht im ersten Schritt alle zutreffenden IDs aus A abzuholen und diese dann beim auszählen mit in die WHERE Bedingung zu packen. Da riskiere ich aber im ungünstigsten Fall eine WHERE-Bedingung mit 20.000 Einträgen zu erstellen).

Irgend eine Idee wie sich das Problem lösen lässt? Datenbank ist MySQL 5.0

Grüße