Robert: Join Abfrage unheimlich langsam

Beitrag lesen

Hallo Ihr Lieben,

ich habe folgendes Problem, zwei Tabellen (siehe Create unten).
Diese Versuche ich mit einem LEFT JOIN zu verknüpfen.
Primary Key von auftrag ist auf_index und der foregin key von ba ist ebenfalls auf_index. Es gibt also immer ein auf_index in auftrag aber nicht immer ein auf_index in ba.

Folgender Join wird benutzt:

SELECT A.auf_index, A.auf_auflagentermin, B.ba_lfnr, B.ba_datum, B.ba_arbeitsvermerk, B.ba_auflagentermin, B.ba_auflagentermin_ok
FROM auftrag A LEFT JOIN ba B ON (A.auf_index=B.auf_index)
where
where (A.auf_typ='Auftrag' AND A.auf_auflagentermin is not NULL AND A.auf_auflagentermin_ok is NULL AND A.auf_auflagentermin>="2004-05-03" AND B.auf_index IS NULL) OR (A.auf_typ='BA' AND B.ba_auflagentermin is not NULL AND B.ba_auflagentermin_ok is NULL AND B.ba_auflagentermin>="2004-05-03" AND A.auf_index=B.auf_index) and ((A.auf_typ='Auftrag' and B.ba_auflagentermin_ok is NULL and B.ba_auflagentermin is not NULL or A.auf_typ='BA')) ORDER BY B.ba_auflagentermin desc, A.auf_index desc;

Wie kann man die Abfrage optimieren? ich will nur Datensätze wo ein auf_auflagentermin!=NULL und ba_auflagentermin!=NULL vorhanden ist.

Kann man die Verknüpfung vor der Where Clausel einschränken?
Tabelle auftrag hat ca 4000 Datensätze und ba ca. 1000.

Table structure for table 'auftrag'

CREATE TABLE auftrag (
  auf_datum date default NULL,
  auf_auftrag blob,
  auf_bearb2 varchar(50) default NULL,
  auf_index bigint(20) NOT NULL auto_increment,
  auf_auftragsart varchar(20) NOT NULL default '',
  auf_auflagentermin date default NULL,
  auf_auflagentermin_ok tinyint(3) unsigned default NULL,
  PRIMARY KEY  (auf_index)
) TYPE=MyISAM;

Table structure for table 'ba'

CREATE TABLE ba (
  ba_lfnr bigint(20) NOT NULL auto_increment,
  ba_datum date default NULL,
  ba_auflagentermin date default NULL,
  ba_auflagentermin_ok tinyint(3) unsigned default NULL,
  PRIMARY KEY  (ba_lfnr),
  UNIQUE KEY ba_lfnr (ba_lfnr)
) TYPE=MyISAM;

Vielen Dank für die Hilfe

RObert