Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOQuery.open dauert zu lange (https://www.delphipraxis.net/44093-adoquery-open-dauert-zu-lange.html)

thomasch 13. Apr 2005 13:01

Datenbank: Oracle • Version: 9 • Zugriff über: OLE über ODBC

ADOQuery.open dauert zu lange
 
Hallo,
es geht mir eigentlich nur um die Darstellung von Werten aus einer LookupTable/Kennungsliste - dazu habe ich folgendes:

Delphi-Quellcode:
  form1.ADOConnection1.Open('user','passwort');
  form1.adoquery1.active := false;
  form1.adoquery1.sql.clear;
  form1.ADOQuery1.SQL.Append('select a.foo from Atable a where a.bar in (select b.bar from BTable b where B.wert like :param);');
  form1.ADOQuery1.Parameters.ParamByName('param').Value:=myinputvalue;

form1.ADOQuery1.Open;
...
Das open dauert mir zu lange, schon bei sehr kleinen Datenmengen. Das SQL Statement gegen die DB läuft wesentlich schneller.

Da nur a.foo eine Werliste wiedergeben soll - ist ADOQuery möglicherweise das nicht optimale Verfahren?

Thomasch

bate 13. Apr 2005 13:05

Re: ADOQuery.open dauert zu lange
 
Zitat:

Zitat von thomasch
Hallo,
es geht mir eigentlich nur um die Darstellung von Werten aus einer LookupTable/Kennungsliste - dazu habe ich folgendes:

Delphi-Quellcode:
  form1.ADOConnection1.Open('user','passwort');
  form1.adoquery1.active := false;
  form1.adoquery1.sql.clear;
  form1.ADOQuery1.SQL.Append('select a.foo from Atable a where a.bar in (select b.bar from BTable b where B.wert like :param);');
  form1.ADOQuery1.Parameters.ParamByName('param').Value:=myinputvalue;

form1.ADOQuery1.Open;
...
Das open dauert mir zu lange, schon bei sehr kleinen Datenmengen. Das SQL Statement gegen die DB läuft wesentlich schneller.

Da nur a.foo eine Werliste wiedergeben soll - ist ADOQuery möglicherweise das nicht optimale Verfahren?

Thomasch

Hmm wenn das Connecten zu lange dauert, liegt das am SQL Server oder an der Verbindung. Das hat nichts mit dem
SQL Statement zu tun.

shmia 13. Apr 2005 13:30

Re: ADOQuery.open dauert zu lange
 
Auf dem Feld ATable.bar sollte/muss ein Index liegen, ansonsten ist auf ATable ein Full Table Scan nötig.

thomasch 13. Apr 2005 14:06

Re: ADOQuery.open dauert zu lange
 
Zitat:

Zitat von shmia
Auf dem Feld ATable.bar sollte/muss ein Index liegen, ansonsten ist auf ATable ein Full Table Scan nötig.

Der ist da - ATable.bar ist der PK der Tabelle.
Momentan benötige ich dafür zwischen 0 und 3 sekunden - bei je maximal 200 Datensätzen. :(

Thomasch

thomasch 13. Apr 2005 14:14

Re: ADOQuery.open dauert zu lange
 
Offenbar braucht das 'like' so lange.

Die selbe Abfrage mit "= :param" statt "like :param" ist in einem ersten Test bis zu 3 Sekunden schneller. Bei so wenigen Datensätzen (<200) hätte ich das so nicht vermutet.

Danke trotzdem.

Thomasch

Stevie 14. Apr 2005 07:53

Re: ADOQuery.open dauert zu lange
 
Versuch mal, deine Abfrage umzustellen und auf b.wert ein Index zu legen.
SQL-Code:
select
  a.foo
from
  ATable a,
  BTable b
where
  a.bar = b.bar and
  b.wert like :param


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