hkl: Query Laufzeit verbessern

Beitrag lesen

Hallo !

Hi,

Was war jetzt die EintragsID von der Du anfangs sprachst ?
Ich seh in B einen Fremdschluessel PersonenID der wohl auf A(ID) verweist.

PersonenID verweist auf ID. Es gibt in der Tabelle B aber auch noch eine eindeutige ID, die ich vorher nicht erwähnt habe.

Die '...' wuerde ich gern mal sehen

Die ... sind weitere counts über die jeweils anderen Spalten. Also COUNT(b.gehalt) usw. Plus noch einige weitere Spalten, die ich der Übersichtlichkeit halber weggelassen habe.

Wieso RIGHT [OUTER] JOIN ?

Tippfehler. Ist ein LEFT JOIN.

:-| Das ist schon ein KLEINER Unterschied, oder ?
Bevor ich hier poste mach ich kurze Tests.
Aber ungern nur zum Spielen.

Wie stelltst Du das fest ? Koennte auch an der WHERE clause liegen.

Da die WHERE-Bedingung ausgesprochen simpel ist halte ich das für eher unwahrscheinlich. Komplizierter als SpalteX > XYZ wird das nicht.

Mach mal ein EXPLAIN und poste das bitte.

[id] => 1
[select_type] => SIMPLE
[table] => a
[type] => ALL
[possible_keys] =>
[key] =>
[key_len] => [
ref] =>
[rows] => 20001
[Extra] =>

[id] => 1
[select_type] => SIMPLE
[table] => b
[type] => ref
[possible_keys] => PersonenID
[key] => PersonenID
[key_len] => 8
[ref] => testdb.a.ID
[rows] => 5
[Extra] =>

=> Wie waer's denn mit einem PRIMARY KEY auf A(ID) ? <=
;-)
Ohne Indices schneckt das auch bei mir ( 32k A / 64 k B Saetze )

Tabellentype ist MyISAM.

Beim JOIN ueber den PK soll InnoDB schneller sein.
Ist Dir klar dass Du mit MyISAM KEINE echten referentiellen INtegritaeten hast ?

Wenn Du aus A einen in B referenzierten Satz loescht wuerde trotz ON DELETE / ON UPDATE clause nichts passieren - ausser dass die ref. Int. nicht mehr gegeben waere !

Das ist KEIN Scherz !

Mit InnoDB kann man das alles vermeiden.

Grüße

Marc

Gruesse

Holger

--
Aus dem Perl Styleguide:
"Choose mnemonic identifiers. If you can't remember what mnemonic means, you've got a problem."