Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   SQL Abfrage dauert ewig (https://www.delphipraxis.net/170820-sql-abfrage-dauert-ewig.html)

value is NULL 4. Okt 2012 13:47

SQL Abfrage dauert ewig
 
Hey Leute

Habe folgende Procedure

Delphi-Quellcode:
procedure DoQuery2(const sQuerySQL : string; DestList: TStrings);
begin
  DestList.BeginUpdate;
  try
    DestList.Clear;
    oTmpQry := TADOQuery.Create(nil);
    try
      try
        oTmpQry.Connection := Conn2;
        oTmpQry.CommandTimeout := 5000;
        oTmpQry.SQL.Text := sQuerySQL;
        oTmpQry.Open;
        while not oTmpQry.eof do begin
          DestList.add(oTmpQry.Fields[0].asString);
          oTmpQry.Next;
        end;
      except
        on e : exception do begin
          DestList.add(e.message);
        end;
      end;
    Finally
      oTmpQry.free;
    end;
  finally
    DestList.EndUpdate;
  end;
end;
Die funktioniert auch, jedoch habe lasse ich mir jetzt mit einem Query knapp 3,8 Millionen ID in die Destination Stringlist schreiben und das dauert natürlich ewig.

Kann ich das ganze irgendwie schneller umsetzen?

LG und Danke schon mal

Bernhard Geyer 4. Okt 2012 13:50

AW: SQL Abfrage dauert ewig
 
Definiere "Ewig"!

und bist du dir sicher das das schreiben in die Stringliste so lange dauert oder doch das abholen von 3,8 Mio. Datensätzen von der DB

hast du auch richtige Curserlocation und fragst du auch nur die benötigt spalte ab?

value is NULL 4. Okt 2012 14:01

AW: SQL Abfrage dauert ewig
 
naja ewig heisst in meinem Fall ca 10 - 15 Minuten Minuten für 200.000 Datensätze.
Wenn ich es lokal über das Microsoft Management Studio durchführe is es wesentlich schneller.

LG

Bernhard Geyer 4. Okt 2012 14:18

AW: SQL Abfrage dauert ewig
 
Zitat:

Zitat von value is NULL (Beitrag 1185684)
naja ewig heisst in meinem Fall ca 10 - 15 Minuten Minuten für 200.000 Datensätze.
Wenn ich es lokal über das Microsoft Management Studio durchführe is es wesentlich schneller.

Du hast 2 Fragen übersehen die ich noch gestellt habe.
Als weitere Frage: Ist DestList nur eine einfache Stringlist oder kommt das z.b. von einer TListBox? Welche Einstellungen hat sie (evt. sortiert?)

Furtbichler 4. Okt 2012 14:20

AW: SQL Abfrage dauert ewig
 
1. Ist die DestList vielleicht ein ListBox.Items oder ein Memo.Text? <-- Bernhard war schneller
2. Wer braucht denn 3.8 Mio Datensätze?
3. Tipp: Exportiere die Daten per SQL in eine Text-Datei und lies sie dann ein.
Code:
sqlcmd -S myServer -d myDB -E -Q "select col1, col2, col3 from SomeTable" -o "MyData.txt"

p80286 4. Okt 2012 14:26

AW: SQL Abfrage dauert ewig
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1185680)
hast du auch richtige Curserlocation

Was wäre denn "richtig"?

@value is null
3.8 Mio Datensätze?
und nur IDs wen interessiert das??

Gruß
K-H

OK es sind immer die gleichen Rückfragen, die hier gestellt werden.

Bernhard Geyer 4. Okt 2012 14:28

AW: SQL Abfrage dauert ewig
 
Zitat:

Zitat von p80286 (Beitrag 1185698)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1185680)
hast du auch richtige Curserlocation

Was wäre denn "richtig"?

Kommt auf die DB an.
MS SQL Server: clUseClient
MS Access: clUseServer

Bummi 4. Okt 2012 14:32

AW: SQL Abfrage dauert ewig
 
versuch mal statt while not eof ... next, ist um Welten schneller
Delphi-Quellcode:
   while not Adodataset1.RecordSet.EOF do
    begin
       sl.Add(Adodataset1.RecordSet.Fields[0].Value);
       Adodataset1.RecordSet.MoveNext;
    end;
3.8 Mio - MS
.eof ;
Offen 15817
Fertig ?? abgebrochen nach 5 Minuten

.Movenext
Offen 15007
Fertig 29827

value is NULL 4. Okt 2012 14:38

AW: SQL Abfrage dauert ewig
 
also das is geil!

Delphi-Quellcode:
   while not Adodataset1.RecordSet.EOF do
    begin
       sl.Add(Adodataset1.RecordSet.Fields[0].Value);
       Adodataset1.RecordSet.MoveNext;
    end;
da liegen ja welten dazwischen!

Bummi 4. Okt 2012 14:40

AW: SQL Abfrage dauert ewig
 
freut mich dass es Dich freut ... :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.
Seite 1 von 2  1 2      

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