Zitat von
mkinzler:
Gib doch genau mal im Admintool genau die abfrage an, welche du im Programm durchführst.
Versuch mal eine Neuindizierung.
1) Es sind vielleicht 1000 einzelne Abfragen, je nachdem wieviel Unter(-unter)knoten der gewählte Eintrag hat.
2) So?
SQL-Code:
SET TERM & ;
CREATE PROCEDURE REINDEX
AS
declare variable
SQL VARCHAR(200);
BEGIN
FOR
select rdb$index_name
from rdb$indices
INTO :
SQL
DO
BEGIN
SQL='
SET STATISTICS INDEX '||
SQL||'
;';
execute statement :
sql;
END
END &
SET TERM ; &
EXECUTE PROCEDURE REINDEX;
>
Query OK, -1 rows affected (0,08 sec)
Wenn der mit -1 das Gesamtergebnis meint, hat das scheinbar nicht geklappt? Denn schneller finde ich's danach auch nicht.
Zitat von
Bernhard Geyer:
Zitat von
Nuclear-Ping:
1) Nicht dass ich wüßte. Wie mache ich sowas?
Delphi-Quellcode:
qry.text := 'SELECT * FROM DataDB WHERE CategoryID = :CategoryId';
qry.prepared := True;
<meine Schleife>
qry.Close;
qry.ParamByName('CategoryId').AsString := ...;
qry.Open;
<meine Schleife>
Aber ADS ist schon gut schnell. Ob du hier viel mit Firebird Embedded gewinnst?
Aktuell bin ich auch auf der Suche nach einem DesktopDB-Ersatz für ADS Local Server.
Ja, den ALS hast du mir damals bei Spotlight (spectrumizer) empfohlen. Das war glaube vor 5-6 Jahren.
War seit dem ersten Tag auch ziemlich zufrieden damit, nur nach der Zeit wollte ich mir auch mal was aktuelles anschauen.
Und grad hats wieder Klick gemacht, über ein Konzept was ich die ganze Zeit missverstanden hab.
Ich habs die ganze Zeit (auch bei ADS) so gemacht:
Delphi-Quellcode:
<meine Prozedur>
qry.text := 'SELECT * FROM ... WHERE CategoryId = :CategoryId';
qry.Prepare;
qry.Open;
<fetch></fetch>
qry.Close;
</meine Prozedur>
<meine Schleife>
meine Prozedur
</meine Schleife>
Jaja ... Ich weiß ->
ZEOS hat in der Version allerdings kein Prepare / Prepared. Hab da aber mal kurz zum testen 'ne globale Boolean-Variable angelegt und den qry.Text-Teil darein gepackt, wenn sie nicht TRUE ist.
Delphi-Quellcode:
<meine Prozedur>
if not QueryPrepared then
begin
qry.text := 'SELECT * FROM ... WHERE CategoryId = :CategoryId';
QueryPrepared := TRUE;
end;
qry.ParamByName ('CategoryId') := CategoryId;
qry.Open;
<fetch></fetch>
qry.Close;
</meine Prozedur>
QueryPrepared := FALSE;
<meine Schleife>
meine Prozedur (CategoryId)
</meine Schleife>
Muss aber sagen, dass ich keinen Geschwindigkeitsunterschied feststelle.
(Ich hasse neue Systeme ...)