Einfaches Select MySQL 5 vs 4

Einfaches Select MySQL 5 vs 4

am 16.08.2006 14:21:54 von Mark Knochen

Hallo,

ich habe ein langes, aber eigentlich einfaches SELECT über mehrere
(genau sechs) Tabellen:

SELECT
tb_xxx_artikel.Artikelnummer AS Artikelnummer,
tb_xxx_artikel.id AS artikelID,
tb_xxx_artikel.Farbe AS artikelFarbe,
tb_xxx_artikel_kombination.kombiartikel AS Bestellnummer,
tb_xxx_produkt.Produktbezeichnung AS Produktbezeichnung,
tb_xxx_produkt.id AS produktID,
tb_xxx_funktion.id AS gruppeID,
tb_xxx_programm.id AS programmID,
tb_xxx_programm.name AS programmName,
tb_xxx_bereich.id AS bereichID,
tb_xxx_bereich.name AS bereichName
FROM
tb_xxx_artikel_kombination,
tb_xxx_artikel,
tb_xxx_produkt,
tb_xxx_funktion,
tb_xxx_programm,
tb_xxx_bereich
WHERE
tb_xxx_artikel_kombination.artikel = '1000'
AND tb_xxx_artikel_kombination.kombiartikel = tb_xxx_artikel.Bestellnummer
AND tb_xxx_artikel.produkt = tb_xxx_produkt.id
AND tb_xxx_produkt.funktion = tb_xxx_funktion.id
AND tb_xxx_funktion.programm = tb_xxx_programm.id
AND tb_xxx_programm.bereich = tb_xxx_bereich.id
ORDER BY tb_xxx_artikel.Bestellnummer


Unter MySQL 4 kein Problem. MySQL 5 hängt sich auf.

Aber es ist doch nur ein einfaches SELECT, weiss jemand
wo der Fehler sein könnte?

Danke

Mark

Re: Einfaches Select MySQL 5 vs 4

am 16.08.2006 14:43:05 von Sven Paulus

Mark Knochen wrote:
> Unter MySQL 4 kein Problem. MySQL 5 hängt sich auf.
> Aber es ist doch nur ein einfaches SELECT, weiss jemand
> wo der Fehler sein könnte?

Was heisst "haengt sich auf"? Kannst Du noch einen SHOW PROCESSLIST
in einer parallelen Verbindung absetzen? Was ist dessen Ausgabe? Hast
Du bei beiden Datenbanken die gleichen Indizes? Was sagt EXPLAIN auf
Dein Statement?

Re: Einfaches Select MySQL 5 vs 4

am 16.08.2006 15:02:11 von Mark Knochen

> Was heisst "haengt sich auf"? Kannst Du noch einen SHOW PROCESSLIST
> in einer parallelen Verbindung absetzen?

Beim Starten der Abfrage über phpMyAdmin kann ich quasi nix mehr machen
... :-(


> Hast > Du bei beiden Datenbanken die gleichen Indizes? Was sagt EXPLAIN auf
> Dein Statement?

EXPLAIN sagt:

id select_type table type possible_keys key
key_len ref rows Extra

1 SIMPLE tb_xxx_artikel ALL NULL NULL NULL NULL 5489 Using
temporary; Using filesort

1 SIMPLE tb_xxx_produkt eq_ref PRIMARY PRIMARY
8 xxx.tb_xxx_artikel.produkt 1

1 SIMPLE tb_xxx_funktion eq_ref PRIMARY PRIMARY 8
xxx.tb_xxx_produkt.funktion 1

1 SIMPLE tb_xxx_programm eq_ref PRIMARY PRIMARY 8
xxx.tb_xxx_funktion.programm 1

1 SIMPLE tb_xxx_bereich eq_ref PRIMARY PRIMARY 8
xxx.tb_xxx_programm.bereich 1

1 SIMPLE tb_xxx_artikel_kombination ALL NULL NULL NULL NULL
31756 Using where


Sieht für mich eigentlich normal aus ...

Mark

Re: Einfaches Select MySQL 5 vs 4

am 16.08.2006 15:11:22 von Sven Paulus

Mark Knochen wrote:
> EXPLAIN sagt:

> id select_type table type possible_keys key
> key_len ref rows Extra

> 1 SIMPLE tb_xxx_artikel ALL NULL NULL NULL NULL 5489 Using=20
> temporary; Using filesort

> 1 SIMPLE tb_xxx_produkt eq_ref PRIMARY PRIMARY
> 8 xxx.tb_xxx_artikel.produkt 1

> 1 SIMPLE tb_xxx_funktion eq_ref PRIMARY PRIMARY 8=20
> xxx.tb_xxx_produkt.funktion 1

> 1 SIMPLE tb_xxx_programm eq_ref PRIMARY PRIMARY 8=20
> xxx.tb_xxx_funktion.programm 1

> 1 SIMPLE tb_xxx_bereich eq_ref PRIMARY PRIMARY 8=20
> xxx.tb_xxx_programm.bereich 1

> 1 SIMPLE tb_xxx_artikel_kombination ALL NULL NULL NULL NULL=20
> 31756 Using where


> Sieht für mich eigentlich normal aus ...

Setz doch mal Indizes auf:

tb_xxx_artikel_kombination.artikel
tb_xxx_artikel_kombination.kombiartikel
tb_xxx_artikel.Bestellnummer

Da oben sind zwei Zeilen ohne Indexnutzung drin.

Re: Einfaches Select MySQL 5 vs 4

am 16.08.2006 16:14:17 von Mark Knochen

Mark Knochen wrote:
>
> SELECT
> tb_xxx_artikel.Artikelnummer AS Artikelnummer,
> tb_xxx_artikel.id AS artikelID,
> tb_xxx_artikel.Farbe AS artikelFarbe,
> tb_xxx_artikel_kombination.kombiartikel AS Bestellnummer,
> tb_xxx_produkt.Produktbezeichnung AS Produktbezeichnung,
> tb_xxx_produkt.id AS produktID,
> tb_xxx_funktion.id AS gruppeID,
> tb_xxx_programm.id AS programmID,
> tb_xxx_programm.name AS programmName,
> tb_xxx_bereich.id AS bereichID,
> tb_xxx_bereich.name AS bereichName
> FROM
> tb_xxx_artikel_kombination,
> tb_xxx_artikel,
> tb_xxx_produkt,
> tb_xxx_funktion,
> tb_xxx_programm,
> tb_xxx_bereich
> WHERE
> tb_xxx_artikel_kombination.artikel = '1000'
> AND tb_xxx_artikel_kombination.kombiartikel = tb_xxx_artikel.Bestellnummer
> AND tb_xxx_artikel.produkt = tb_xxx_produkt.id
> AND tb_xxx_produkt.funktion = tb_xxx_funktion.id
> AND tb_xxx_funktion.programm = tb_xxx_programm.id
> AND tb_xxx_programm.bereich = tb_xxx_bereich.id
> ORDER BY tb_xxx_artikel.Bestellnummer
>

Es funktioniert unter MySQL 5 genauso schnell wie bei 4, wenn ich die
Abfrage so gestalte ....


SELECT *,
..... der Rest bleibt so wie oben ....

eigenartig ...

Mark

Re: Einfaches Select MySQL 5 vs 4

am 16.08.2006 22:11:17 von Dominik Echterbruch

Mark Knochen wrote:
>> Was heisst "haengt sich auf"? Kannst Du noch einen SHOW PROCESSLIST
>> in einer parallelen Verbindung absetzen?
>
> Beim Starten der Abfrage über phpMyAdmin kann ich quasi nix mehr machen
> .. :-(

Vergiss phpMyAdmin
Was sagt denn die MySQL Konsole dazu? phpMyAdmin ist IMNSHO nicht das
geeignete Werkzeug für Debugging dieser Art.


Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal