AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Grundsätzlich - kann DB mehrere Indizes kombinieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Grundsätzlich - kann DB mehrere Indizes kombinieren?

Ein Thema von BlackbirdBerlin · begonnen am 8. Sep 2015 · letzter Beitrag vom 11. Sep 2015
Antwort Antwort
Seite 2 von 3     12 3      
hoika

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

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 04:35
Hallo,
ein Join über 2 Tabellenfelder bei großen Tabellen sollte schneller sein, wenn beide Felder indiziert sind.
Das Bsp. von IBExpert zeigt das auch (ok, ist kein Join).
Mehrfelder-Indizes können z.B. bei Firebird nur benutzt werden, wenn die Abfrage die Felder in der Index-Reihenfolge benutzt: Index auf Tab1 (A,B) wird bei Where B=5 nicht benutzt.
Bei Oracle ist das aber glaube ich anders.

Bei vielen ist immer noch in Gedanken: Index verlangsamt Insert/Update, ist ja richtig.
Die Beschleunigung des Select steht im Hintergrund.

Es gibt doch bei Oracle auch einen Optimierer, der bei einer DB Vorschläge macht, wie die schneller arbeitet, also bei einer Query sagt, mit Index auf Feld X geht es schneller.
Ich meine jetzt nicht den internen SQL-Optimizer.

Ich hatte bei Interbase damals den IBPlanalyzer benutzt, um unseren Chef von Indizes zu überzeugen und auch mit realen Daten (große DB, Sekunden Ausführungszeit pro reale Funktion) gearbeitet.

Wenn eine Inventur oder Statistik am Wochenende gemacht wird und 10 Stunden dauert und es dem Kunden egal ist, kann man natürlich nicht so viel machen.


Heiko
Heiko
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#2

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 04:59
Hallo zusammen.
Vielen Dank für Euren Input.
Noch ganz kurz zur Erklärung, es handelt sich um eine verhältnismäßig zentrale Tabelle mit Bewegungsdaten, die permanent recht viele Schreibzugriffe (haupts. Insert) erfährt. In den Systemen, in welchen auf meinen Wunsch hin der Index angelegt wurde, ergab sich subjektiv keine Verschlechterung der Schreibperformance, jedoch eine massive Verbesserung des Lesezugriffs (s.o.).
Die QS-Systeme, auf denen man das jeweils aufgrund der Transportreihenfolge (SAP Dev, QS, Prod) prüfen kann, sind meist 1:1 Kopien vom Produktivsystem.
Die Software, die vom Index nutznießen würde, läuft täglich. Es handelt sich um ein Schnittstellenprogramm.
Die Datenbanken sind meist Oracle oder DB2.
Viele Grüße
Tim
Tim
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 11:48
hallo,

jetzt verstehe ich die Frage nicht mehr, welchen Sinn würde es machen mehrere Indizes (Wie lautet die Mehrzahl auf Index, ich musste erstmal google) auf eine Tabelle zu benutzen?

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 11:54
Wenn sich mehrere Spalten in der Einschränkung befinden (Name = "Mayer" und Vorname = "Peter"), dann ist es am optimalsten wenn ein Index über genau diese beiden Spalten existiert.
Je nach DBMS kann nun auch ein 2 Indizes (einer auf Name und einer auf Vorname) herangezogen werden, diese Lösung ist imho immer scghlechter als ein passender Index mit den beiden Spalten, aber besser als ein full table scan.
Markus Kinzler
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#5

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 12:00
Hi Frankyboy,
grundsätzlich ergibt es viel Sinn, für eine Tabelle mehrere Indizes zu definieren, die verschiedene Abfragen optimieren.
Die Frage war aber, ob es Sinn ergibt, mehrere "einfeldige" Indizes anzulegen, anstelle spezieller Indizes mit mehreren Feldern und darauf zu bauen, dass die DB diese in Kombination verwendet (was wohl unter dem Schlagwort Bitmapped Indexes so zu sein scheint).
Und wenn es die Steigerung von optimal gäbe, dann wäre es wohl am "optimalsten", wenn man einen konkreten Index definiert, welcher die Schlüsselfelder der Abfrage indiziert.
Grüße,
Tim
Tim
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#6

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 12:21
hallo Blackbird,

ich verstehe die Frage jetzt immer noch nicht,
Zitat:
Wie realisieren Datenbanken einen Index???
Warum legt nicht die Datenbank automatisch auf jedes Feld einen Index an. Dann würde die Suche nach diesem Feld wohl schneller funktionieren?? Und wenn ich nach zwei Felder suche, dann kombiniert die DB einfach die beide Inizes und ist dann immer noch schneller als ein Tablescan? Also mein Gedanke wäre immer noch, bei der ersten Abfrage veruchst du einen Index zu erwischen, und den Rest programmierst du selbst.

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 12:26
Ein Index beschleunigt die Suche, verlangsamt aber Insert/Update/Delete Vorgänge, weil auf Grund dieser ja Aktualsierung der Indizes notwendig wird. Deshalb wird automatisch nur ein Index für den Primärindex erzeugt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 12:34
Jeder Index auf einer Tabelle ist intern eine weitere Tabelle mit den Inhalten der indizierten Felder. Darum macht z.B. ein Index mit allen Feldern keinen Sinn, weil ich damit nur die Tabelle dupliziere.

Jeder Index belegt auch Speicher. Jeder Index muss wie die Tabelle aktualisiert werden. Mit einem Index-Wildwuchs kann ich den Plattenplatz verbraten und die Einfüge-Geschwindigkeit in den Keller drücken.

Es ist also ein Balance-Akt zwischen Speicherplatz und Abfrage-/Einfüge-Geschwindigkeit.

Für riesige Datenmengen mit vielen Abhängigkeiten werden für die Auswertung auch gerne mal separate Systeme genutzt. Die sind dann zwar nicht unbedingt absolut auf dem aktuellsten Stand, dafür aber bei der Abfrage höllenschnell. Wenn ich wissen will was letzten Monat passiert ist, dann ist mir aber der Stand von vor einer Sekunde so was von egal.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 9. Sep 2015 um 12:38 Uhr)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 14:52
...Die Frage war aber, ob es Sinn ergibt, mehrere "einfeldige" Indizes anzulegen, anstelle spezieller Indizes mit mehreren Feldern und darauf zu bauen, dass die DB diese in Kombination verwendet (was wohl unter dem Schlagwort Bitmapped Indexes so zu sein scheint).
Und wenn es die Steigerung von optimal gäbe, dann wäre es wohl am "optimalsten", wenn man einen konkreten Index definiert, welcher die Schlüsselfelder der Abfrage indiziert.
Nun, ich bin ja ein eher praktisch denkender Mensch, und darum würde ich das Problem einfach mal eben auch von der praktischen Seite angehen. Denn, so schön die Diskussion hier mitzulesen ist, und so unterschiedlich die DB's das handhaben, Klarheit wird letztendlich nur ein Test bringen.

Da die Struktur der DB bekannt ist, ist das Anlegen von ein paar Mio Datensätzen in drei Test-Tabellen in allen drei Varianten (Original wie beim Kunden, mit Einzel-Index und mit zusammengesetztem Index) keine Hexerei.

Wenn meine Annahme stimmt, hau ich dem Kunden das Ergebnis um die Ohren und bin der King. Wenn nicht, verkriech ich mich in mein stilles Örtchen und warte bis der Anfall vorüber ist
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
BlackbirdBerlin

Registriert seit: 15. Okt 2009
Ort: 10318 Berlin
91 Beiträge
 
Delphi 7 Architect
 
#10

AW: Grundsätzlich - kann DB mehrere Indizes kombinieren?

  Alt 9. Sep 2015, 16:36
Hi Otto,

das Problem beim Mal-Eben-Testen ist, dass selbst die QS in einer Hochverfügbarkeitsumgebung läuft, weil da viele Projekte parallel laufen und mal eben einen Index für knapp 200 Mio Datensätze anlegen oder drei Testtabellen ins System kippen und damit zig ( oder mehr ) Leute bis zur Behebung des Problems arbeitsunfähig machen, geht leider nicht.
In einer "eigenen" Umgebung solche Tests fahren, ist natürlich kein Problem. Aber da hat man eben nicht die Gewissheit, dass die Systemumgebung und die Datenkonstellation zu dem gleichen Ergebnis führen.

Viele Grüße
Tim
Tim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:31 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