Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Doppel-Select-Anweisung zu langsam (https://www.delphipraxis.net/173041-doppel-select-anweisung-zu-langsam.html)

Sir Rufo 5. Feb 2013 18:56

AW: Doppel-Select-Anweisung zu langsam
 
@Morphie

Nur so zum Spass, leg doch mal einen Index ArtikelBeleg an mit eben den beiden Spalten ArtikelNr, BelegNr (auch in der Reihenfolge wie in der Where Bedingung). Die Laufzeit und das Explain würden mich mal interessieren (von beiden).

Ich vermute mal, dass MySQL jetzt schneller wird (weil es jetzt einen passenden Index zum Where gibt).
Ob Maria da noch etwas zulegen kann ...

Morphie 5. Feb 2013 19:34

AW: Doppel-Select-Anweisung zu langsam
 
Kein Vorteil...
Den Index habe ich so angelegt:
Code:
ALTER TABLE `positionen` ADD INDEX `ArtikelBeleg` (`artikelnr`, `Belegnr`);
Der Plan sieht jetzt so aus:
Code:
id  select_type  table       type    possible_keys                           key           key_len   ref                 rows     Extra
1   SIMPLE       POSITIONEN  ref     PRIMARY,artikelnr,belegnr,ArtikelBeleg  ArtikelBeleg  53        const               16140    Using where
1   SIMPLE       BELEGE      eq_ref  PRIMARY,belegart                        PRIMARY       52        POSITIONEN.belegnr  1        Using where
Er nimmt jetzt also den Index, aber irgendwie immer noch anders als bei MariaDB... Geschwindigkeitsvorteile gibt es auch keine

Blup 6. Feb 2013 10:13

AW: Doppel-Select-Anweisung zu langsam
 
Zitat:

Zitat von jobo (Beitrag 1202181)
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..

Stimmt, ich hatte das distinct vergessen:
Code:
/* Index über SpalteDatum erforderlich */
CREATE VIEW V_SpalteA2012(
    SpalteA)
AS
Select distinct SpalteA from Tabelle1 where SpalteDatum between '20120101' and '20121231';
Zumindest auf meiner Testdatenbank mit ca. 1000000 Datensätzen mit ähnlicher Datenstruktur, wird die eigentlich Abfrage dann in unter einer Sekunde abgearbeitet.

Codehunter 6. Feb 2013 11:53

AW: Doppel-Select-Anweisung zu langsam
 
Ich glaub ich muss mir unbedingt mal bissi Literatur zur MySQL-Optimierung besorgen.

Ykcim 6. Feb 2013 14:14

AW: Doppel-Select-Anweisung zu langsam
 
Hallo Zusammen,

habe mich von meinem Herzanfall erholt ;-) Ok, Spaß beiseite, ich war gestern geschäftlich unterwegs und konnte mich daher nicht weiter dem Problem wittmen.

Ich hatte nicht erwartet, so eine Diskussion loszutreten... Ich habe sie gelesen und das, was ich verstanden habe, auch ausprobiert, aber ohne Erfolg. Selbst nach einer Stunde bekomme ich noch kein Ergebnis...wollte einfach mal wissen, was passiert, wenn ich warte...

Ich überlege jetzt einen anderen Ansatz:
Für mich ist es nur wichtig, dass ich alle Arbeitsgänge eines Auftrags ausgegeben bekomme. Daher kann ich also auch damit leben, dass ich nur die Aufträge mit allen Arbeitsgängen erhalte, die in dem entsprechenden Zeitraum gestartet und auch beendet wurden.

Hier mal ein Beispiel

Auftrag...AG...Rückmeldung
Diesen Auftrag möchte ich komplett mit allen Arbeitsgängen bekommen

0004711...10...20120105
0004711...20...20120115
0004711...30...20120117
0004711...40...20120123
0004711...50...20120205

Diesen Auftrag will ich komplett mit allen Arbeitsgängen NICHT bekommen, weil der AG 10 in 2011 fertig war
0006874...10...20111231
0006874...20...20120103
0006874...30...20120103
0006874...40...20120103
0006874...50...20120103

Diesen Auftrag will ich komplett mit allen Arbeitsgängen NICHT bekommen, weil der AG 50 in 2013 fertig war
0009632...10...20121205
0009632...20...20121217
0009632...30...20121220
0009632...40...20121228
0009632...50...20130110


Kann mir jemand bei der SQL-Anweisung helfen?

Vielen Dank
Patrick

jobo 6. Feb 2013 14:35

AW: Doppel-Select-Anweisung zu langsam
 
Also Du hast tatsächlich eines der hier genannten Statements inkl Distinct ausgeführt?
Zeig doch mal bitte und den Ausführungsplan dazu auch!

Ykcim 6. Feb 2013 14:48

AW: Doppel-Select-Anweisung zu langsam
 
Hallo Jobo,

folgende SQL-Anweisung war nach über einer Stunde noch nicht fertig:
Delphi-Quellcode:
select
      concat(A.WAAUNR, A.WAAUPO), A.WATENR, A.WAGFMG, A.OAAGBZ, A.OAMANR, DATE_FORMAT(A.OARMDA,"%d.%m.%Y") AS OARMDA, A.OARMMG
      from as400archiev A
,(select DISTINCT WAAUNR, WAAUPO, OARMDA from as400archiev where OARMDA between '20120101' and '20121231') B
 where A.WAAUNR=B.WAAUNR and A.WAAUPO=B.WAAUPO
Ich bin nicht der fitteste in SQL. Wenn ich da etwas falsch umgesetzt habe, bin ich um jede Hilfe froh.

Vielen Dank
Patrick

jobo 6. Feb 2013 15:13

AW: Doppel-Select-Anweisung zu langsam
 
wofür brauchst Du das OARMDA im subselect?

Ykcim 6. Feb 2013 15:34

AW: Doppel-Select-Anweisung zu langsam
 
Stimmt, das hatte ich in einer der vielen Versuche mal mit reingenommen...

Aber an der Geschwindigkeit hat sich nichts geändert... Ich fürchte, so komme ich nicht weiter :cry:

jobo 6. Feb 2013 15:46

AW: Doppel-Select-Anweisung zu langsam
 
Was ist mit Indizes und Ausführungsplänen?
Wieviel DS ergibt das Subselect?
Lass Dir doch nicht alles aus der Nase ziehen, hier kann keiner zaubern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Seite 4 von 6   « Erste     234 56      

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-2025 by Thomas Breitkreuz