AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Doppel-Select-Anweisung zu langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Doppel-Select-Anweisung zu langsam

Ein Thema von Ykcim · begonnen am 4. Feb 2013 · letzter Beitrag vom 7. Feb 2013
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#31

AW: Doppel-Select-Anweisung zu langsam

  Alt 5. Feb 2013, 18:56
@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 ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#32

AW: Doppel-Select-Anweisung zu langsam

  Alt 5. Feb 2013, 19:34
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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#33

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 10:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#34

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 11:53
Ich glaub ich muss mir unbedingt mal bissi Literatur zur MySQL-Optimierung besorgen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#35

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 14:14
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
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#36

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 14:35
Also Du hast tatsächlich eines der hier genannten Statements inkl Distinct ausgeführt?
Zeig doch mal bitte und den Ausführungsplan dazu auch!
Gruß, Jo
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#37

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 14:48
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 '20120101and '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
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#38

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 15:13
wofür brauchst Du das OARMDA im subselect?
Gruß, Jo
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#39

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 15:34
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
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#40

AW: Doppel-Select-Anweisung zu langsam

  Alt 6. Feb 2013, 15:46
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz