On 27.08.2018 21:51, Stefan Ram wrote:
> Ich mache ein JOIN einer Fremdschlüsselspalte mit einer
> Primärschlüsselspalte. Beide sollten ein Register (KEY,
> INDEX) haben
Register? Das Dingens heißt Index oder meinetwegen auch Key.
> Laut EXPLAIN könnte die Abfrage das Register
> PRIMARY auch nutzen (Spalte "possible_keys"), tut es aber
> nicht (Spalte "key"). Warum nicht?
Der PRIMARY Index wird nur für die äußere Tabelle als möglicher Index
aufgeführt. Aber da es keine WHERE Bedingung gibt, müssen sowieso /alle/
Rows der äußeren Tabelle gelesen werden. Ein Index bringt da gar nichts.
Für die innere Tabelle (Index: KUNDE) : viel zu wenig Rows. Selbst ohne
JOIN-Buffer würde ein Lookup für eine von 4 Rows keinen Index verwenden.
Außerdem wird ein Block Nested Loop Join gemacht, der bei derart geringen
Datenmengen nur /einmal/ den JOIN-Buffer mit Rows aus der äußeren Tabelle
füllt und dann /einmal/ die Rows der inneren Tabelle gegen die JOIN-Spalte
aus dem Buffer vergleicht.
Guckstu:
https://dev.mysql.com/doc/refman/5.7/en/nested-loop-joins.html