![]() |
Datenbank: Access • Zugriff über: ADO
SQL bei Acess langsam
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 |
Re: SQL bei Acess langsam
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.
|
Re: SQL bei Acess langsam
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. |
Re: SQL bei Acess langsam
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 |
Re: SQL bei Acess langsam
Zitat:
Was passiert wenn das gleiche direkt Access durchgeführt wird? |
Re: SQL bei Acess langsam
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? |
Re: SQL bei Acess langsam
Wenn ich ohne ORDER BY mach, dann ist es Rattenschnell, aber natürlich nict in der gewünschten Sortierung.
SQL-Code:
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 Kundennummer
SQL-Code:
Das braucht im Daten-Explorer auch 20 Sekunden.
select TOP 20 * FROM Debitor ORDER BY Name1
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 |
Re: SQL bei Acess langsam
Zitat:
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. |
Re: SQL bei Acess langsam
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 |
Re: SQL bei Acess langsam
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr. |
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