Delphi-PRAXiS
Seite 2 von 2     12   

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)

mkinzler 26. Aug 2007 21:40

Re: Merkwürdikeit bei Select max(id) from..
 
Diese Kompatibilität gilt auch für FB2. Allerdings weiß man nicht wie lange noch. Alternativen wären
IBDAC, FIBplus, Zeos, UIB, MDO, ...

WoGe 26. Aug 2007 22:06

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

jetzt hab ich folgenden Server : Server version: WI-V6.3.1.12855 Firebird 2.0
und diesen IBExpert: Version 2007.07.20

Leider verwendet der immernoch den PLAN SORT ((ROHWERTE NATURAL))

Besteht die Möglichkeit, das noch irgendwas anderes da Einwirken könnte?

mkinzler 26. Aug 2007 22:08

Re: Merkwürdikeit bei Select max(id) from..
 
Vielleicht die Anzahl der Datensätze. Was für ein Typ hat das Feld?

WoGe 26. Aug 2007 22:53

Re: Merkwürdikeit bei Select max(id) from..
 
Das Feld ist vom Typ Bigint

Die Anzahl der Datensätze habe ich auf ca. 500.000 reduziert.
Zudem habe ich ein Feld Ar2 vom Typ Integer erzeugt und mit dem Inhalt von AR gefüllt und einen Index dazu erstellt.

Auch hier bleibt alles wie gehabt.
Ich werde jetzt noch mal auf 250.000 Sätze reduzieren und AR enfernen.

TBx 27. Aug 2007 02:30

Re: Merkwürdikeit bei Select max(id) from..
 
Das beobachtete Verhalten erklärt sich wie folgt:

Firebird kennt sowohl ascending als auch descending indices.
PKs werden automatisch ascending angelegt.
Um die Max()-Funktion auszuführen, guckt der Optimizer nach, ob es zu dem entsprechenden Feld einen DESCENDING Index gibt. Ist ein solcher nicht vorhanden, so wird gar kein Index genutzt.
Leg Dir also zusätzlich einen descending index auf das Feld, das Du mit der MAX()-Funktion bearbeiten willst und Dein Problem ist gelöst.

Dies ist auch der einzige Weg, die volle Geschwindigkeit zu erhalten.
Verwendet man die Variante mit dem first 1 und der descending order ohne den descending index anzulegen, so ist der db-Server immernoch gezwungen, den vollen Index zu durchlaufen.

Gruß

Thomas

WoGe 27. Aug 2007 08:36

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

Zitat:

Zitat von onlinekater
Das beobachtete Verhalten erklärt sich wie folgt:

Firebird kennt sowohl ascending als auch descending indices.
PKs werden automatisch ascending angelegt.
Um die Max()-Funktion auszuführen, guckt der Optimizer nach, ob es zu dem entsprechenden Feld einen DESCENDING Index gibt. Ist ein solcher nicht vorhanden, so wird gar kein Index genutzt.
Leg Dir also zusätzlich einen descending index auf das Feld, das Du mit der MAX()-Funktion bearbeiten willst und Dein Problem ist gelöst.

Das funktioniert genau wie beschrieben, das Problem ist hiermit gelöst.
Der Optimizer verwendet jetzt auf allen mit einem DESCENDING Index versehenen Felder auch diesen und ist entsprechend schnell.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 2 von 2     12   

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