AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird - Temporärer Index
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird - Temporärer Index

Ein Thema von lxo · begonnen am 19. Jun 2023 · letzter Beitrag vom 21. Jun 2023
Antwort Antwort
Seite 1 von 2  1 2      
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#1

Firebird - Temporärer Index

  Alt 19. Jun 2023, 18:15
Datenbank: Firebird • Version: 4 • Zugriff über: UniDAC
Hallo zusammen,

weiß jemand ob es in Firebird die Möglichkeit gibt einen temporären Index zu verwenden.
Also nur innerhalb einer stored procedure oder execute block?

Ich habe eine stored procedure die deutlich schneller wäre wenn ich einen bestimmten Index hätte für ein paar Tabellen.
Grundsätzlich ist dieser Index jedoch nicht wirklich nötig.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 19:13
Hast Du mal versucht einen View auf die Tabelle zu erzeugen und den benötigten Index auf diesen View zu setzen? Die stored procedure müßte dann auf den View zugreifen und nicht auf die Tabelle dahinter...
Peter Below
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 19:18
Wie kann man denn für eine View einen Index erstellen?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 19:22
Wüsste nicht, dass das unter FireBird möglich ist.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 20:53
Hallo zusammen,

weiß jemand ob es in Firebird die Möglichkeit gibt einen temporären Index zu verwenden.
Also nur innerhalb einer stored procedure oder execute block?

Ich habe eine stored procedure die deutlich schneller wäre wenn ich einen bestimmten Index hätte für ein paar Tabellen.
Grundsätzlich ist dieser Index jedoch nicht wirklich nötig.
Ich denke auch, sowas gibt es nicht.

Wenn Du eine SP ausführst, könntest Du dort:
a) eine (temporäre) Tabelle anlegen, die
b) bereits Daten zusammenführt / minimiert und dort
c) anschließend selbst einen Index für erstellen.
dann
d) die eigentlichen Abfrage fahren
e) die Tabelle aus a) und damit automatisch auch den Index löschen.

In jedem Fall gilt, ein "temporärer" Index muss jedes Mal erstellt werden. Das kostet Zeit, die sich nur für sehr aufwändige Abfragen lohnen würde.
Gruß, Jo
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 21:53
Wie sieht es denn aus mit Index generell auf INACTIVE setzen und nur innerhalb der Procedure auf ACTIVE.
Kann das zu Problemen führen?
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 22:49
Wie sieht es denn aus mit Index generell auf INACTIVE setzen und nur innerhalb der Procedure auf ACTIVE.
Steht in der Dokumentation:
Zitat:
With the INACTIVE option, the index is switched from the active to inactive state. The effect is similar to the DROP INDEX statement except that the index definition remains in the database. ...An active index can be deactivated if there are no queries prepared using that index. ...Activating an inactive index is also safe. ...With the ACTIVE option, if the index is in the inactive state, it will be switched to active state and the system rebuilds the index.
Interessant wäre zu erfahren, wie viele Datensätze die betroffenen Tabellen haben. Wie die aktuelle Laufzeit ist und welche Verbesserung du dir erhoffst. Wenn die Anzahl der Datensätze überschaubar ist, kann eine andere (als unkonventionell angesehene) Technik hilfreich sein. Lade die betroffenen Datensätze aus der Datenbank, erstelle deine Verknüpfungen mit Hilfe von Maps und erledige alle Berechnungen lokal. Ob dieses Vorgehen in Betracht kommen könnte, dazu müssten wir mehr wissen. Die Erwähnung einer Stored Procedure lässt etwas Raum zur Spekulation.

Bis bald...
Thomas

Geändert von mytbo (19. Jun 2023 um 22:54 Uhr)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#8

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 23:02
Die Tabelle in der die stored Procedure immer wieder sucht ist schon sehr groß ca. 1 Million Datensätze.
Problem ist nur das ich nicht den Primärschlüssel zum suchen verwenden kann.
Die Procedure sucht im Schnitt so grob 100 Einträge in dieser großen Tabelle und das ist sehr langsam nicht indiziert.
Ohne Index ca. 6 Sekunden
Mit Index 32 ms
Das Ding ist einfach nur das ich die Indices eigentlich nur für den Fall brauche und sonst eigentlich nicht.


Die Infos zum Index aktivieren und deaktivieren habe ich bereits gelesen. Ich würde das aber gerne nur für die Connection oder Transaction machen.
Nicht das ich den Index aktiviere und am Ende nicht wieder deaktivieren kann weil eine andere Connection den Index verwendet. Da weiß ich nicht wie sich das verhält und wollte wissen ob da evtl. jemand Erfahrung mit hat.

Geändert von lxo (19. Jun 2023 um 23:07 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#9

AW: Firebird - Temporärer Index

  Alt 19. Jun 2023, 23:25
Die Tabelle in der die stored Procedure immer wieder sucht ist schon sehr groß ca. 1 Million Datensätze.
Welchen Typ hat das Feld, in dem du suchen musst? 1M Datensätze sind nicht viel, damit bringst du keine Datenbank ins Schwitzen. Wenn es keine anderen Gründe gibt, erstelle einfach einen Index oder warte bis Holger vorbeikommt.

Bis bald...
Thomas

Geändert von mytbo (19. Jun 2023 um 23:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

AW: Firebird - Temporärer Index

  Alt 20. Jun 2023, 02:41
Klar, könnte man zu Beginn in der SP einen INDEX erstellen und am Ende wieder löschen.
Wenn es knallt, wird es auch automatisch wieder zurückgerollt. (denk ich mal)

Man könnte auch eine TempTable in der SP erstellen und füllen.

Aber
* ist das Erstellen des Index dann wirklich schneller, als der langsame Zugriff?
* wäre es wirklich so schlimm, wenn der "nötige" Index immer bestehen bleibt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 00:17 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