AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism SQL bei Acess langsam
Thema durchsuchen
Ansicht
Themen-Optionen

SQL bei Acess langsam

Ein Thema von eddie11 · begonnen am 25. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#1

SQL bei Acess langsam

  Alt 25. Nov 2005, 11:15
Datenbank: Access • Zugriff über: ADO
Hi,

bin SQL-Newbie und habe ein Problem. Ich habe eine Tabelle in einer Access-Datenbank mit etwa 100.000 Sätzen, Ich möchte ab einer bestimmten Position (Kundennummer ist Primary-Key) jeweils 10 Datensätze einlesen.

Delphi-Quellcode:
var
    Connstr: System.String;
    Sql: System.String;
    Conn: OleDbConnection;
    DAdapter: OleDbDataAdapter;
    DSet: DataSet;
    DTable: DataTable;
    DRow: DataRow;

begin
   Connstr:= 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=..\AccessDatenbank.mdb';
   Conn := oledbconnection.create(connstr);
   Sql := 'SELECT TOP 20 * FROM Debitor ORDER BY Kundennummer';
   DAdapter := OleDbDataAdapter.Create(Sql, Conn);
   DSet:= DataSet.Create();
   DAdapter.fill(DSet,0,10,'Debitor');
   conn.open;
   DTable := DSet.Tables['Debitor'];
   DRow := DTable.Rows[0];
   kundennummer := DRow['Kundennummer'].ToString;
   conn.close;
end;

Es dauert ewig und drei Tage bis der SQL-Befehl abgearbeitet ist und die ersten 10 Sätze zur Bearbeitung zur Verfügung stehen. Meine Frage: mach ich irgendwas falsch oder ist Access für solche grossen Datenmengen einfach nur ungeeignet?

Danke und Gruß
Eddie
Edgar Leifeld
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 11:19
Ich weiß jetzt nicht wo du es bei .NET und OLEDB einstellst, aber unter Win32 sollte man bei Access immer die Curser-Location auf clUseServer stellen, damit nicht die Ergebnismenge nochmals im Speicher kopiert wird sondern direkt die Ergebnismenge direkt von der JET-Engine verwendet wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 12:44
Um die ersten 20 Records, sortiert nach Kundennummer darzustellen, muss Access ja wissen, welches die 20 Records sind. Wenn Du keinen Index auf der Kundennummer hast, dann verwurstet dir jede DB die gesamte Tabelle, bzw. sortiert diese. Die SQL-Engine von Access ist sowieso nicht die Schnellste, aber so ein einfaches SELECT sollte es doch hinbekommen.

Wo der Cursor ist (Client oder Server) ist hier imho egal, weil es sowieso nur 20 Records sind. Ansonsten hast Du aber recht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#4

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 12:54
Das weiss ich schon, dass die Datenbank wissen muss welches die ersten 20 Records sind, habe die Kundennummer als Primary-Key definiert - reicht das nicht? Muss ich noch irgendwas definieren?

Eddie
Edgar Leifeld
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 12:56
Zitat von alzaimar:
Wo der Cursor ist (Client oder Server) ist hier imho egal, weil es sowieso nur 20 Records sind. Ansonsten hast Du aber recht.
Hab ich überlesen das es ein "TOP 20"-Abfrage ist.

Was passiert wenn das gleiche direkt Access durchgeführt wird?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 13:00
OK. Ich weiss nicht genau, ob ein PK auch einen Index erzeugt, probier doch mal, ob es noch langsamer ist, wenn Du z.B. ein "ORDER BY Anschrift" machst...

Wenn Du das Select in Access aufrufst, was passiert dann? [2 Geeks, ein Gedanke, Bernhard, ]
Wenn Du das Select ohne ORDER BY ausführst, was passiert?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#7

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 13:20
Wenn ich ohne ORDER BY mach, dann ist es Rattenschnell, aber natürlich nict in der gewünschten Sortierung.

select TOP 20 * FROM Debitor ORDER BY Kundennummer Wenn ich das im SQL-Fenster vom Delphi-Datenexplorer mache, dann dauert es ca. 20 Sekunden, genauso wie im Prog

select TOP 20 * FROM Debitor ORDER BY Name1 Das braucht im Daten-Explorer auch 20 Sekunden.

Es scheint keinen Unterschied zu machen, ob ich über ein Schlüsselfeld sortiere oder nicht. Das genau sollte aber doch der Sinn eines Schlüsselfeldes sein...

Eddie
Edgar Leifeld
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 15:47
Zitat von eddie11:
Es scheint keinen Unterschied zu machen, ob ich über ein Schlüsselfeld sortiere oder nicht. Das genau sollte aber doch der Sinn eines Schlüsselfeldes sein...
Eddie
Ein PK dient dazu, die einzelnen Datensätze eindeutig zu identifizieren. Und ein Index dient in erster Linie dazu, etwas schnell zu finden, und nicht, die Daten sortiert abzulegen. Der PK sollte, da hast Du Recht, vom Sinn her allerdings dafür sorgen, das die Daten schon sortiert abgelegt werden. Das tut es aber nicht. Wenn ich z.B. im SQL-Server nur ein PK definiere, bekomme ich einen 'non-clustered' Index. Aber nur ein 'clustered' Index sortiert mir die Datensätze. Leider kennt Access keine 'clustered' Indexe.

Du merkst, das Access bei so vielen Daten nicht das gelbe vom Ei ist. Ich würde sowieso auf eine richtige DB umsteigen, z.B. MSDE, FB o.ä. Ich arbeite mit MSDE / MS SQL-Server und bin sehr zufrieden. Ich habe keine Performanceprobleme.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#9

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 16:51
wollte ohnehin nicht mit Access arbeiten, habe nur der Einfachheit halber zu Versuchszwecken - bin absoluter Delphi-Newbie - mit Access rumprobiert, um nicht extra einen DB-Server aufsetzen zu müssen. Werde jetzt wohl doch einen MySql o.ä. einrichten.

Danke für die schnelle Hilfe
Eddie
Edgar Leifeld
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: SQL bei Acess langsam

  Alt 25. Nov 2005, 17:25
Nee, nich mySQL. Schnapp Dir lieber die MSDE oder FB. Das ist die DB auch dann noch 100% ok, wenn der PC mal abschmiert (z.B. beim Stromausfall). Bei mySQL ist dann u.U. die komplette DB nicht mehr lesbar. Nie wieder.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:32 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