Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access und SELECT TOP 1 (https://www.delphipraxis.net/157316-access-und-select-top-1-a.html)

handson 7. Jan 2011 12:08

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Access und SELECT TOP 1
 
Hallo!

Ich möchte gerne mittels SQL Abfrage die nächste Nummer in der Datenbank finden. Die Datenbank ist Access und wird über ADO angesprochen. Ich benutze die folgende Abfrage:

Code:
SELECT TOP 1 kontonr FROM personenkonten
  WHERE mandantenid = '000' AND
        kontonr > '00010000'
  ORDER BY kontonr ASC;
Das Ergebnis ist auch korrekt, er liefert mir die nächste Nummer in der Tabelle heraus.
Das Problem ist aber, die Tabelle besitzt ca. 220000 Datensätze, und er orgelt erst alle 220000 Datensätze durch bevor er mir das Erbnis von einem Datensatz zurück gibt. Das gleiche mache ich auch mit einer MySQL-Datenbank mit dem Parameter LIMIT. Dort holt er auch nur einen Datensatz.

Meine Frage: Kann ich das bei Access noch irgendwie steuern, dass er nach einem gefundenen Datensatz gleich abbricht, denn er braucht jetzt immer ca. 5-10 sek. or Abfrage und das ist auf Dauer nicht schön.

Stephan

DeddyH 7. Jan 2011 12:13

AW: Access und SELECT TOP 1
 
Ich nutze kein Access, aber geht es evtl. so schneller?
SQL-Code:
SELECT MIN(kontonr) FROM personenkonten
  WHERE mandantenid = '000' AND
        kontonr > '00010000'

handson 7. Jan 2011 12:20

AW: Access und SELECT TOP 1
 
Funktionieren tut es, das Ergebnis ist das gleiche, allerdings braucht er immer noch die gleiche Zeit, ca. > 10 sek.

Trotzdem, Danke für den Tipp.

DeddyH 7. Jan 2011 12:21

AW: Access und SELECT TOP 1
 
Hast Du einen Index auf kontonr gesetzt?

Bernerbaer 7. Jan 2011 12:29

AW: Access und SELECT TOP 1
 
Ich benutze access nicht und kenne dessen Sql syntax nicht, aber vielleicht vielleicht gehts ja schneller mit einer Aggregatsfunktion:

select first(kontonr)from ... group by...)

handson 7. Jan 2011 12:35

AW: Access und SELECT TOP 1
 
Nein, auch damit muss ich enttäuschen. Das Erbnis mit FIRST stimmt, aber die Performance nicht.

Ich habe das Gefühl, dass Access einfach für so große Datenmengen nicht ausgelegt ist. Nun gut,
ich will ja eh nur als Archivierungs-DB benutzen.

Trotzdem Danke!

p80286 7. Jan 2011 12:38

AW: Access und SELECT TOP 1
 
Die Antwortzeit ist wohl eher ein Problem von Access.
versuch mal mit dem Connection String zu spielen:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase;Persist Security Info=False;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
Grüße
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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