AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Merkwürdikeit bei Select max(id) from..
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von WoGe · begonnen am 26. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

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

  Alt 26. Aug 2007, 20:50
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBExpert
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:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 26. Aug 2007, 20:54
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
select first 1 id from rohwerte desc;
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

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

  Alt 26. Aug 2007, 21:01
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 26. Aug 2007, 21:03
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.
Markus Kinzler
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#5

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

  Alt 26. Aug 2007, 21:05
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
select first 1 id from rohwerte desc;
Ausser das Firebird das "desc;" nicht mag, läuft auch dieses Statement nur mit
PLAN (ROHWERTE NATURAL)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

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

  Alt 26. Aug 2007, 21:09
Hallo,

gemeint war:

select first 1 ar from rohwerte order by ar desc Grüße vom marabu
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 26. Aug 2007, 21:11
Hab das hier mit FB2 getestet (Tabelle hatte nur 214 T Einträge ging problemlos.
Markus Kinzler
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#8

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

  Alt 26. Aug 2007, 21:22
@Marabu:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 26. Aug 2007, 21:23
Welche 1.5x hast du denn?
Eine Migration auf die 2er ist aber unabhängig davon ratsam
Markus Kinzler
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#10

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

  Alt 26. Aug 2007, 21:34
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 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