"OR" Verknüpfungen in Abfragen sind immer schlecht...
Arbeite lieber mir UNION ALL, das dürfte schonmal schneller sein:
SQL-Code:
SELECT kv.*, kr.ID as id_rechnungen, null as id_gutschriften, null as id_lieferscheine
FROM kasse_vorgaenge kv
LEFT JOIN kasse_rechnungen kr ON kv.ID = kr.vorgangsnummer
WHERE kv.kundennummer = 1 AND kv.datum BETWEEN '2006-05-01' AND '2006-11-28'
UNION ALL
SELECT kv.*, null as id_rechnungen, kg.ID as id_gutschriften, null as id_lieferscheine
FROM kasse_vorgaenge kv
LEFT JOIN kasse_gutschriften kg ON kv.ID = kg.vorgangsnummer
WHERE kv.kundennummer = 1 AND kv.datum BETWEEN '2006-05-01' AND '2006-11-28'
UNION ALL
SELECT kv.*, null as id_rechnungen, null as id_gutschriften, kl.ID as id_lieferscheine
FROM kasse_vorgaenge kv
LEFT JOIN kasse_lieferscheine kl ON kv.ID = kl.vorgangsnummer
WHERE kv.kundennummer = 1 AND kv.datum BETWEEN '2006-05-01' AND '2006-11-28'
Leg einen Index über (kv.kundennummer, kv.datum) und jeweils einen über die Vorgangsnummer der anderen Tabellen.
Gruß
Andi