Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Merkwürdikeit bei Select max(id) from.. (https://www.delphipraxis.net/98398-merkwuerdikeit-bei-select-max-id.html)

WoGe 26. Aug 2007 20:50

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBExpert

Merkwürdikeit bei Select max(id) from..
 
Hallo,

ich habe zum Testen der Performance eine Testtabelle entworfen die 15.000.000 Datensätze enthält.
AR ist die ID und der PrimaryKey

Dabei habe ich folgende überaschende Merkwürdogkeit entdeckt:

SQL-Code:
Select * FROM ROHWERTE
where ar between 14000000 and 14000010
liefert innerhalb von ca. einer 10-tel sec die richtigen Werte zurück
unter Verwendung folgenden Plans: (lt. IBExpert)

Plan
PLAN (ROHWERTE INDEX (PK_ROHWERTE))

Adapted Plan
PLAN (ROHWERTE INDEX (PK_ROHWERTE))

während das hier:
SQL-Code:
Select max(ar) FROM ROHWERTE
unter Verwendung folgenden Plans ca 2min braucht:

Plan
PLAN (ROHWERTE NATURAL)

Adapted Plan
PLAN (ROHWERTE NATURAL)

Was könnte dafür die Ursache sein und wie kann man das Umschiffen?

Viele Grüsse
wo

mkinzler 26. Aug 2007 20:54

Re: Merkwürdikeit bei Select max(id) from..
 
Es gibt ja kein Index für den Maxwert, sondern nur für die Werte, deshalb scheint diese Abfrage ohne den Index ausgeführt zu werden. Versuch mal
SQL-Code:
select first 1 id from rohwerte desc;

alzaimar 26. Aug 2007 21:01

Re: Merkwürdikeit bei Select max(id) from..
 
Zitat:

Zitat von mkinzler
Es gibt ja kein Index für den Maxwert, sondern nur für die Werte, deshalb scheint diese Abfrage ohne den Index ausgeführt zu werden.

Ein halbwegs guter Optimizer/Queryplan-Ersteller sollte aber schon wissen, das MIN/MAX-Aggregate bei geeigneter WHERE-Klausel mit einem Index in O(1) zu holen sind. Insofern halte ich das schon für einen gewaltigen Faux-Pax in Firebird.

mkinzler 26. Aug 2007 21:03

Re: Merkwürdikeit bei Select max(id) from..
 
Zitat:

Ein halbwegs guter Optimizer/Queryplan-Ersteller sollte aber schon wissen, das MIN/MAX-Aggregate bei geeigneter WHERE-Klausel mit einem Index in O(1) zu holen sind.
Sollte er eigentlich.

WoGe 26. Aug 2007 21:05

Re: Merkwürdikeit bei Select max(id) from..
 
Zitat:

Zitat von mkinzler
Es gibt ja kein Index für den Maxwert, sondern nur für die Werte, deshalb scheint diese Abfrage ohne den Index ausgeführt zu werden. Versuch mal
SQL-Code:
select first 1 id from rohwerte desc;

Ausser das Firebird das "desc;" nicht mag, läuft auch dieses Statement nur mit
PLAN (ROHWERTE NATURAL)

marabu 26. Aug 2007 21:09

Re: Merkwürdikeit bei Select max(id) from..
 
Hallo,

gemeint war:

SQL-Code:
select first 1 ar from rohwerte order by ar desc
Grüße vom marabu

mkinzler 26. Aug 2007 21:11

Re: Merkwürdikeit bei Select max(id) from..
 
Hab das hier mit FB2 getestet (Tabelle hatte nur 214 T Einträge ging problemlos.

WoGe 26. Aug 2007 21:22

Re: Merkwürdikeit bei Select max(id) from..
 
@Marabu:
SQL-Code:
select first 1 ar from rohwerte order by ar desc
funktioniert so zwar prinzipiell, aber der Query-Plan bleibt wie gehabt

@mkinzler:
Ich werdemal die Datenbank auf FB2 umstellen, das dauert bei der Menge allerdings eine Weile

Ich werde dann hier weiter berichten.

mfg
wo

mkinzler 26. Aug 2007 21:23

Re: Merkwürdikeit bei Select max(id) from..
 
Welche 1.5x hast du denn?
Eine Migration auf die 2er ist aber unabhängig davon ratsam

WoGe 26. Aug 2007 21:34

Re: Merkwürdikeit bei Select max(id) from..
 
Server version: WI-V6.3.4.4910 Firebird 1.5

Der Backup ist auch gleich fertig, und ich stelle dann auf 2.0 Realease um.
An der Stelle frag ich mich nur noch wenn das besser/richtig funktioniert welche Zugriffskomponeten ich dann in Delphi nehmen soll, da ich den FB1.5 ja wegen der (noch vorhandenen) Kombapilität zu dem Interbase-Kombos von Delphi ausgewählt hatte..


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.
Seite 1 von 2  1 2      

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