AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Indextabelle verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Indextabelle verwenden

Ein Thema von messie · begonnen am 21. Apr 2014 · letzter Beitrag vom 22. Apr 2014
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Indextabelle verwenden

  Alt 21. Apr 2014, 18:41
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Moin,

ich habe eine Tabelle mit Indizes von Einzelkomponenten (z.B. 3000 Stück) vorliegen und muss zu diesen das Messdatum aus der Messdatentabelle auslesen. Im Moment mache ich das mit Einzelabfragen, was natürlich quälend langsam ist. Ich würde also gerne die Indizes übergeben.
Hier (#7) habe ich einen Ansatz gefunden, eine stored proc zur Laufzeit so zu verändern, dass man die aktuellen Daten übergeben kann.
Ist das ein gangbarer Weg, stored procs zur Laufzeit um zu bauen? Für mich gehören SP und Views zur Datenbankstruktur die ich nicht so gerne anfassen möchte.

Grüße, Messie
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#2

AW: Indextabelle verwenden

  Alt 21. Apr 2014, 19:52
Hallo,

was verstehst du denn unter Indizes von Einzelkomponenten? Was ist denn bei dir ein Index bzw. welches Problem willst du lösen?
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Indextabelle verwenden

  Alt 21. Apr 2014, 20:03
Hallo Thomas,

die Datenstruktur ist Auftrag -> Fertigungslos -> Komponente -> Subkomponente -> Messwertarray

Ich habe also jeden Messwert einzeln in der DB rumliegen. Er hat seinen eigenen Index, den der Subkomponente und den Timestamp. Es können aber mehrere Messpunkte an einer Subkomponente vorhanden sein (z.B. Nacharbeit oder Reklamation), daher muss ich die Timestamps untersuchen und sortieren. Im ersten Schritt habe ich für jeden in Frage kommenden Messpunkt eine eigene Query was natürlich lange dauert. Das möchte ich jetzt zusammenfassen, möglichst nach einer Methode "select * from DB where SUBCOMPONENT_ID is in ARRAY".


Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Indextabelle verwenden

  Alt 21. Apr 2014, 23:07
Im Normalfall wird bei einer SQL-Abfrage nie ein Index mit angegeben.
Es ist Aufgabe der DB den richtigen Index für eine Abfrage aus zu wählen.
Es gibt allerdings die Möglichkeit bei einigen Dialekten den Index als "Hint" zu übergeben.
wie wäre es mit
Code:
select subkompo,messwert
from tabsubkompo join tabmesswert on (tabsubkompo.subkomponent_id=tabmesswert.subkomponent_id)
gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

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

AW: Indextabelle verwenden

  Alt 22. Apr 2014, 07:53
Das sehe ich wie p80286.
Ggf. je nach Suchkriterien ist das SQL Statement noch um die Zugriffe auf Auftrag -> Fertigungslos -> Komponente mit ensprechenden joins zu erweitern, sowie die Sortierung nach dem Timestamp, den Du erwähnt hast.

Generell: Es ist oft die Rede davon SQL durch den Einsatz von Stored Procedures zu beschleunigen. Die Idee ist häufig aber nicht sonderlich fruchtbar:
Wenn die SP nichts anderes tut, als Daten zu selektieren, indem ein Client SQL Statement in eine SP eingebaut wird, bringt das keinen spürenbaren Gewinn. Ausnahmen wären höchstens Effekte, die sich durch bessere Parameterierung/weniger Parsing des Statements ergeben. Auch das macht sich nur bemerkbar bei hoher Zugriffsfrequenz, also viele Nutzer des Statements oder häufiger Aufruf oder beides.

Eine SP lohnt sich eher bei komplexer Selection, mit Pufferung von Zwischenergebnissen, die nutzbringend weiterverwendet werden können uvam. ggF. auch wahlfreier (indizierter) Zugriff auf Teilmengen / Records (Stichwort window functions oder klassische Spreadsheet Funktionen). Ob das bei Deinem Problem wirklich der Fall sein sollte, wage ich zu bezweifeln.
Gruß, Jo
  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 03:15 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