Hallo,
habe folgende Datenbankstruktur:
Tabelle a:
vorname,nachname,plz
Tabelle b:
plz,ortname
Mit folgenden Statement lasse ich mir vorname und nachname der Tabelle a sowie ein inner-gejointes ortname der Tabelle b:
select a.vorname,a.vorname,a.ortname where a.plz='80788' and b.plz=a.plz
Funktioniert soweit auch gut, das Problem ist dass MySQL keinen Index benutzt. Diese sind sowohl auf plz in der Tabelle a angelegt als auch in der Tabelle b.
EXPLAIN gibt folgendes aus:
Code:
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: b
type: ref
possible_keys: plz
key: plz
key_len: 17
ref: const
rows: 1
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ref
possible_keys: plz
key: plz
key_len: 17
ref: const
rows: 90
Extra: Using where
2 rows in set (0.06 sec)
Wenn ich dem SELECT-Statement das b.ortname weglasse, kann ein Index in der Tabelle benutzt werden:
Code:
mysql> EXPLAIN select a.vorname,a.vorname,a.ortname where a.plz='80788' and b.plz=a.plz\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: b
type: ref
possible_keys: plz
key: plz
key_len: 17
ref: const
rows: 1
Extra: Using where; Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ref
possible_keys: plz
key: plz
key_len: 17
ref: const
rows: 90
Extra: Using where
2 rows in set (0.05 sec)
Sind die Index jeweils auf die Spalte zu wenig? Wie müsste der Index aussehen um auch beim ortsnamen JOIN genutzt werden zu können?
Danke für Ratschläge!
Gruß