![]() |
AW: Doppel-Select-Anweisung zu langsam
So, Enterprise Server heruntergeladen und installiert.
Seltsamerweise ist der sogar noch langsamer als der Community-Server. Ich habe den SQL-Dump also ganz frisch auf dem Enterprise-Server eingelesen. Keine Daten(banken) übernommen! Vorsichtshalber habe ich die Abfrage gleich 3x hintereinander durchgeführt: Zitat:
MySQL Enterprise:
Code:
MariaDB:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE POSITIONEN ref PRIMARY,artikelnr,belegnr artikelnr 53 const 16160 100.00 Using where 1 SIMPLE BELEGE eq_ref PRIMARY,belegart PRIMARY 52 POSITIONEN.belegnr 1 100.00 Using where
Code:
MariaDB macht also irgendwas anders als MySQL.
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE POSITIONEN ref PRIMARY,artikelnr,belegnr artikelnr 53 const 16160 100.00 Using index condition 1 SIMPLE BELEGE eq_ref PRIMARY,belegart PRIMARY 52 POSITIONEN.belegnr 1 100.00 Using where Kann man dieses Verhalten MySQL beibringen? ("USE INDEX" oder ähnliches?) |
AW: Doppel-Select-Anweisung zu langsam
Das geht ziemlich in die Interna, da müßte man wahrscheinlich mal direkt bei MariaDB anfragen. (Bei MySQL solltest du damit lieber nicht landen denke ich *gg*)
|
AW: Doppel-Select-Anweisung zu langsam
Nachtrag (grade erst gesehen):
![]() |
AW: Doppel-Select-Anweisung zu langsam
Ach, MariaDB läuft ja wie gesagt extrem schnell. Es gibt dort keinerlei Probleme, daher lassen wir es jetzt so wie es ist.
Es wundert mich aber sehr, dass so eine simple SQL-Abfrage so einen großen Unterschied wirft. Vor allem bei "Der populärsten Open-Source-Datenbank der Welt" ;-) Und im Zusammenhang mit der eigenen Client Library vom MariaDB (libmysql.dll), die unter LGPL lizensiert ist, fällt mir auch kein Grund ein, warum man sich noch den MySQL-Server von Oracle ins Haus holen sollte... |
AW: Doppel-Select-Anweisung zu langsam
Welche Datentypen werden hier benutzt?
In den Beispielen sehe ich immer nur Strings. Datum, Artikelnummer sind theoretisch schöne Zahlen, wo Computer prima Sortieren und Vergleichen können. Strings sind für Sortieren und Vergleichen eher schlecht. |
AW: Doppel-Select-Anweisung zu langsam
Zitat:
![]() Dein Vergleich ist glaub ich etwas unfair. Eine frische Datenbank hat idR. noch keine Statistiken aufgebaut und die Optimizer Entscheidungen können die Selektivität eines Index nicht berücksichtigen. Hab kein Plan, was man da bei mysql alles anwerfen muss, aber es sollte sich bei größeren Datenmengen schon lohnen, die Statistiken zu fahren. |
AW: Doppel-Select-Anweisung zu langsam
Zitat:
Ein Datum berücksichtige ich hier nicht. Zitat:
Bevor wir auf MariaDB umgestellt haben, lief die DB mehrere Jahre unter MySQL. Dort waren die Abfragen aber genauso langsam. Zitat:
Naja, nu ists aber auch egal, ist ja nicht mein Thema hier ;-) |
AW: Doppel-Select-Anweisung zu langsam
Zitat:
Zitat:
|
AW: Doppel-Select-Anweisung zu langsam
Zitat:
Alle SQL Statements außer dem des TE im ersten Post permutieren mit ziemlicher Sicherheit die Daten! Also aus 10 Datensätzen werden z.B. 25, aus 200 werden 2000 usw. Aus 5000000 wie beim TE werden vermutlich sehr sehr viele.. Zitat:
|
AW: Doppel-Select-Anweisung zu langsam
Du kannst die Artikelnummern Hashen und in einer zusätzlichen Spalte ablegen.
Diese dann Indizien und für den Join als erstes! Argument nutzen.
Code:
Mit dem Optimierer würde ich noch prüfen ob es Sinn macht, dass SQL auf SubQueries oder Left-Joins umzustellen.
SELECT SUM(POSITIONEN.MENGE) FROM POSITIONEN INNER JOIN BELEGE ON (POSITIONEN.BELEGTNRHASH=BELEGE.BELEGNRHASH and POSITIONEN.BELEGNR = BELEGE.BELEGNR) WHERE POSITIONEN.ARTIKELNR = '1090213000' AND BELEGE.BELEGART = 'A' ;
MYSQL neigt gelegentlich dazu kartesische Produkte zu bilden. Vielleicht so?
Code:
SELECT SUM(POSITIONEN.MENGE) FROM POSITIONEN
JOIN (select BELEGE.BELEGNRHASH, BELEGE.BELEGNR FROM BELEGE WHERE POSITIONEN.ARTIKELNR = '1090213000' AND BELEGE.BELEGART = 'A') abc on (POSITIONEN.BELEGTNRHASH=abc.BELEGNRHASH and POSITIONEN.BELEGNR = abc.BELEGNR) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz