Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird - SELECT mit MAX / MIN Abfrage der gefundenen IDs (https://www.delphipraxis.net/129778-firebird-select-mit-max-min-abfrage-der-gefundenen-ids.html)

Tempdir 25. Feb 2009 12:12

Datenbank: Firebird • Version: 2.1 • Zugriff über: IB-Komponenten

Firebird - SELECT mit MAX / MIN Abfrage der gefundenen IDs
 
Hallo,

ich versuche gerade in Firebird eine Query zu bauen, welche von den gefundenen Datensätzen nur denjenigen ausgibt, dessen Primärschlüssel am kleinsten ist. Also in der Art etwa:

SQL-Code:
SELECT * FROM tabelle WHERE FIELD2='TRUE' AND FIELD1=MIN(FIELD1);
In der Anleitung hab ich das gefunden: Anelitung Firebird MAX/MIN aber ich bekomme es einfach nicht hin.

Zwar könnte ich folgendes machen:

SQL-Code:
SELECT MIN(FIELD1) FROM tabelle WHERE FIELD2='TRUE';
und danach dann nochmal eine Query, aber vielleicht ist da die Performance schlechter? Würde gerne die andere Möglichkeit testen.

Besten Dank!!

Billa 25. Feb 2009 12:17

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Vielleicht: "Select first 1 * from tabelle where field2 = 'TRUE' order by field1" ?

Tempdir 25. Feb 2009 12:20

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Wow DANKE! Das klappt und scheint sehr flott zu sein.

Gibts noch schnellere Alternativen?

Billa 25. Feb 2009 12:22

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Index auf Field1?

DeddyH 25. Feb 2009 12:26

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Sind Primärschlüssel nicht automatisch indexiert?

Tempdir 25. Feb 2009 12:26

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Ja - Primärschlüsselindex wurde bei mir automatisch ein Index erstellt. Bei FIELD2 hab ich auch einen erstellt.

Billa 25. Feb 2009 12:30

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Nützlicher als ein Index auf ein Boolsches Field2 (Selektivität = 0.5) ist sicherlich der Index auf Field1

Tempdir 25. Feb 2009 12:38

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Dem stimme ich zu, ich hab nur folgendes Problem:

Meine Tabelle enthält insgesamt 45 Spalten. Für meine Abfrage benötige ich allerdings nur FELD1 (=der Primärschlüssel, der kleinste) und FELD2 (= ein Flag, welches anzeigt ob der Datensatz schon bearbeitet wurde).

Meine Abfragen wurden deutlich schneller, als ich für FELD2 einen Index erstellt habe. Es ist übrigens ein VARCHAR(1) Feld, anscheinend gibt es keine Boolean-Felder in Firebird?

DeddyH 25. Feb 2009 12:42

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Man kann sich aber eine Boolean-Domäne definieren.

Billa 25. Feb 2009 12:46

Re: Firebird - SELECT mit MAX / MIN Abfrage der gefundenen I
 
Verstanden... Ich benutze statt Boolscher Felder ohnehin immer Integer (für den Fall, daß da nachher doch noch andere Werte vorkommen könnten, nobody is perfect ;) .. und wer denkt schon zur Designzeit an wirlich Alles?) Trotzdem wirkt ein Index erst richtig gut, wenn die Selektivität möglichst niedrig wird. Selektivität ist 1 geteilt durch die Zahl der möglichen Werte. Bei nur zwei möglichen Werten ist der Nutzen nicht soooo gigantisch...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 1 von 3  1 23      

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