Einzelnen Beitrag anzeigen

Ykcim

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

AW: DB Tabelle beschleunigen

  Alt 12. Jul 2019, 15:02
Zitat:
1. Wie schnell ist die?
1,7951 s

Zitat:
2. Und was passiert, wenn du die Query 2mal hintereinander ausführst?
0,0008 s

Zitat:
3. Was läuft noch auf dem Datenbank-Server, vielleicht ein Domain-Controller?
Nichts, auf dem Server läuft ausschließlich der MySQL-Server

Zitat:
Es fehlen: Die Indexdefinitionen!
Leider weiß ich nicht, was damit gemeint ist.

Zitat:
Die auszuführenden SQLs!
Ich glaube zwar nicht, dass das weiterhilft, wenn schon die einfachsten Abfragen Probleme bereiten, aber nachfolgend die Abfragen...
Delphi-Quellcode:
procedure TMySQLDB.Get_Alternativen(ArtikelNr, Bereich: string);
var I: integer;
      where1: string;
      Cols: TCols;
      Rows: TRows;
begin
   where1:='';
   FMySelectQuery.SQL.Clear;
   FMySelectQuery.SQL.Add('select max(a.waaunr) from as400archiev as a '+
                          'where a.watenr=:artikel '+
                          'and left(a.oamanr,2) in (SELECT arbeitsplatzkz from bereiche '+
                          'where bereiche_text= :bereich ) '+
                          'group by a.oamanr ');
   FMySelectQuery.ParamByName('artikel').AsString:=ArtikelNr;
   FMySelectQuery.ParamByName('bereich').AsString:=Bereich;
   ExecQuery(FMySelectQuery, Cols, Rows,0);
   if FMySelectQuery.RecordCount=0 then begin
      SetLength(FRows_Alternativen, Length(FCols_Alternativen),0);
      Exit;
   end;
   for I := 0 to Length(Rows[0]) -1 do begin
      if I=0 then
         where1:=where1+QuotedStr(Rows[0,I])
      else
         where1:=where1+', '+QuotedStr(Rows[0,I])
   end;
   FMySelectQuery.SQL.Clear;
   FMySelectQuery.SQL.Add('select oamanr, mamabz, oaagbz from as400archiev '+
                          'where waaunr in ('+where1+') '+
                          'and left(oamanr,2) in (SELECT arbeitsplatzkz FROM bereiche '+
                          'where bereiche_text=:bereich) '+
                          'group by oamanr' );
   FMySelectQuery.ParamByName('bereich').AsString:=Bereich;
   ExecQuery(FMySelectQuery, FCols_Alternativen, FRows_Alternativen,0);
end;
Mit der ersten Abfrage hole ich mir den letzten Auftrag des Artikels, der beendet wurde und in der zweiten hole ich mir die Maschineninformationen. Die erste Query mache ich, weil sich Angaben zur Geschwindigkeit (in oaagbz) der Maschine von Zeit zur Zeit ändern. Also hole ich mir damit den letzten Stand.

Zitat:
Grundlagen für SQL aneignen: Dringend.
Werde mir die Links am WE vornehmen...

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat