AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird: letzte 10 Datensätze ausgeben zu langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: letzte 10 Datensätze ausgeben zu langsam

Ein Thema von Chemiker · begonnen am 30. Mai 2019 · letzter Beitrag vom 2. Jun 2019
Antwort Antwort
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.910 Beiträge
 
Delphi 12 Athens
 
#1

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 20:28
Wie schnell ist denn
select first 10 mw_id from mw_tabelle order by mw_id desc Gruß
K-H
Das steht im Eingangspost
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 20:56
Hallo,

ich habe einen absteigenden Index angelegt mit:
Code:
CREATE DESCENDING INDEX AB_MW_ID ON MW_TABELLE (MW_ID)
anschließend noch mal die Abfrage aufgerufen:
Code:
select first 10 * from mw_tabelle order by mw_id desc
IB-Expert:

Plan:
PLAN (MW_TABELLE ORDER AB_MW_ID)

------ Performance info ------
Prepare time = 16ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 13.602.268
Max memory = 13.638.264
Memory buffers = 3.000
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 1.304

Ich hätte nicht gedacht, dass der Unterschied so groß ist, weil auf dem Feld mw_id auch der primäre Index liegt.

Was ich nicht verstehe ist, wie Firebird unterscheidet welcher Index genommen werden soll.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 21:18
Zitat:
Ich hätte nicht gedacht, dass der Unterschied so groß ist, weil auf dem Feld mw_id auch der primäre Index liegt.
Der ist aber aufsteigend
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
695 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 22:19
Was ich nicht verstehe ist, wie Firebird unterscheidet welcher Index genommen werden soll.
1. Ein Index, der nicht existiert, wird auch nicht genommen
2. max() wird beschleunigt durch einen descending index
3. min() wird beschleunigt durch einen ascending index
4. sollten zusätzliche Bedingungen existieren, wie zB < oder = oder >, dann können beide Indextypen helfen
5. order by sorgt ggf. auch für indexbenutzung, sofern passende reihenfolge, muss aber nicht unbedingt vorteilhaft sein
6. Welcher Index von mehreren gleichwertigen zuerst genommen wird, entscheidet firebird mit Hilfe der Index Statistik, der sozusagen der Kehrwert der Eindeutigkeit darstellt (=Selektivität)
7. pro SQL kann Firebird pro Tabelle mehr als einen Index benutzen, weil Zwischenergebnisse der rdb$db_keys aus den Indizes übereinander gelegt werden

Die Infos aus 6. und 7. erfordern aber schon ein wenig Basiskenntnisse über Firebird und der Architektur dahinter, unötige Indizes oder unbrauchbare mit mieser Selektivität oder kombinierte Indizes mit unbrauchbarer Feldreihenfolge machen ggf. SQL Abfragen langsamer als man denkt. Wir haben schon so manche Abfrage durch löschen oder austricksen von Indizes beschleunigt, gibt aber nicht unbedingt irgendwelche immergültigen Bauernregeln ...
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
695 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 30. Mai 2019, 22:23
Ach ja, und bei IBExpert > Personal Edition gibt es auch die Seite Performance Analysis beim SQL Editor eine Übersicht, wie viele Operation auf jeder Tabelle durchgeführt wurde
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 31. Mai 2019, 06:58
Hallo,
in einem alten Buch hatte ich mal gelesen:
FB (und auch Interbase) komprimieren die Indexdaten.
Deshalb kann ein Asc-Index nicht für Desc benutzt werden.

Bei anderen DB-Servern geht das wohl (z.B. MS-SQL?).
Weil es ja normalerweise ein B-Tree ist, und dort kann ich ja in beiden Richtungen suchen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 31. Mai 2019, 09:01
Hallo zusammen,

ich muss gestehen das ich auch an einen absteigenden Index gedacht habe, dass aber wieder verworfen, weil ich auf dem Feld schon den primären Index hatte.
Die originale Datenbank hat noch ein größere Menge Datensätze, ich bin mal gespannt wie da die Zugriffszeiten sind.

Dank für die Hilfe und den Erklärungen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
695 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Firebird: letzte 10 Datensätze ausgeben zu langsam

  Alt 2. Jun 2019, 11:54
Als Lektüre sei übrigens mal dieses Dokument empfohlen, falls ihr das noch nicht kanntet:
Auf Seite 111 von 491 findet man da ganz gute Basisinfos

https://firebirdsql.org/file/documen...tation_v25.pdf
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:47 Uhr.
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