Jump to content

Indexierung von Feldern

Empfohlene Beiträge

Hallo,

ich hätte da mal eine Frage bezüglich der Indexierung von DB Feldern.

1. Wie wird das gemacht?

2. Was hat das für Vorteile?

Ich hab gestern eine Abfrage auf ne Datenbank losgelassen, die dann auch gleich mal die ganze DB ausgelastet hat, so dass das Programm, das auch auf die DB zugreift nicht mehr lief. Der Support Mensch meinte, dass meine Abfrage bezüglich der Indexierung nicht optimiert gewesen sei. Was meinte er damit?

Danke und MfG

korea1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hi,

erst ma danke für die schnelle Antwort. Es handelt sich um eine MySQL DB Version 4.x.

Die Datenbank liegt auf unserem Server wird allerdings von der Firma, die das Programm vertreibt betreut.

Kann man einen Index anlegen ohne die DB wesentlich zu verändern?

Wie geht das in MySQL.

Wie muss ich mir dann einen Index vorstellen? Macht dieser die Felder, die dort aufgeführt sind in der Datenbank bekannt, indem er eine Art flag setzt?

Danke und MfG

korea1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wie muss ich mir dann einen Index vorstellen? Macht dieser die Felder, die dort aufgeführt sind in der Datenbank bekannt, indem er eine Art flag setzt?

Stell es dir so vor: Wenn du Datensätze z.B. mit "WHERE spalte >5" SELECTierst muss das SQL ohne Index wirklich alle Einträge durchsehen und vergleichen, da SQL-Daten immer unsortiert vorliegen. Erzeugst du einen Index könnten in einem Cache die primary keys sortiert nach aufsteigenden Werten von <spalte> vorliegen. Damit wird die Suche natürlich leichter und schneller.

Das ist nur ein Versuch das Prinzip zu erklären, ich schätze die wirklichen Methoden sind raffinierter und komplexer.

Indices verbrauchen aber Speicher, sonst würde man sie ja auf jede Spalte legen. Auf die richtigen Spalten Indices zu legen gehört zu einem guten Datenbank-Design.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ein Index bildet die vorhandenen Daten auf einen Binärbaum ab.

Bei einer SELECT Anfrage können die Werte der Felder "besser" (schneller) verglichen werden, da sich die zu durchsuchende Menge nach jedem Vergleich einschränkt.

Ohne Index wird die Suche immer auf die komplette Datenmenge ausgeführt.

Beispiel:

http://www.saar.de/~awa/jbaum.htm

Indices verbrauchen aber Speicher, sonst würde man sie ja auf jede Spalte legen. Auf die richtigen Spalten Indices zu legen gehört zu einem guten Datenbank-Design.

Ausserdem verlangsamen Indizes die Ausführung von Insert und Update Befehlen, da diese entsprechenden Felder auch in die Indizes ergänzt werden müssen.

Gruß,

Markus

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Hi,

erst ma danke für die schnelle Antwort. Es handelt sich um eine MySQL DB Version 4.x.

Die Datenbank liegt auf unserem Server wird allerdings von der Firma, die das Programm vertreibt betreut.

Kann man einen Index anlegen ohne die DB wesentlich zu verändern?

Wie geht das in MySQL.

Wie muss ich mir dann einen Index vorstellen? Macht dieser die Felder, die dort aufgeführt sind in der Datenbank bekannt, indem er eine Art flag setzt?

Danke und MfG

korea1

Hi

Den Aufbau von Indizes in MySQL findest du im Manual (Wie man MySQL-Indexe benutzt).

Kurz:

Indizes in Datenbanken musst du dir als einen Baum vorstellen, der in einer anderen Datei liegt und die einzelnen Blätter verweisen auf Einträge in deiner Tabelle. Je nach Beschaffenheit & Abfrage-Häufigkeit der Daten sollte man Indizes anlegen, da sie den Server dabei unterstützen Daten schneller wiederzufinden.

Je nach Abfrage beurteilt der Server ob er den Datensatz / die Datensätze über den Index suchen soll oder sich ein Scan über die Tabelle lohnt (wenn z.b. die Abfrage einen Großteil des Tabelleninhaltes betrifft). Verschiedene Datenbank-Systeme bieten die Möglichkeit sich den Ausführungsplan einer Abfrage anzeigen zu lassen. Danach kann man dann seine Abfrage optimieren.

Ich denke mal, dass dein Ansprechpartner eher meinte du solltest deine Abfrage so optimieren, dass du dir Informationen möglichst über Indices selektierst. Nicht dass du das Datenbankdesign optimierst....

Gruß,

Honky

[Edit: Mist.. man darf die Antwort nicht so lange schreiben & telefonieren :D]

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

In diesem Falle habe ich Glück und es werden keine Inserts/Updates ausgeführt.

Somit ist dies wohl doch die richtige Lösung.

Natürlich dürfen trotz index auch inserts/updates ausgeführt werden, nur musst du dir im klaren sein, wenn du einen index auf eine tabelle/felder legst, dass es die insert/update ausführungen etwas verlangsamt.

Dies macht sich meist erst bei operationen ab dem 3 stelligen bereich bemerkbar, oder bei größeren Transactionen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Natürlich dürfen trotz index auch inserts/updates ausgeführt werden, nur musst du dir im klaren sein, wenn du einen index auf eine tabelle/felder legst, dass es die insert/update ausführungen etwas verlangsamt.

Dies macht sich meist erst bei operationen ab dem 3 stelligen bereich bemerkbar, oder bei größeren Transactionen.

Ich dachte immer, dass updates durch den index beschleunigt werden, da er die zu updaten Felder schneller findet und auch keine neuen Zeilen einfügen muss.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Ich dachte immer, dass updates durch den index beschleunigt werden, da er die zu updaten Felder schneller findet und auch keine neuen Zeilen einfügen muss.

das kommt ganz darauf an , ob die geänderte spalte indiziert ist oder nicht. update ist somit ein spezialfall. bei inserts/deletes dagegen muss der index immer gepflegt werden.

-j

btw.: indizes müssen nicht immer als btree implementiert sein, auch wenn btrees am häufigsten verwendet werden.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

soweit ich weiss, kannst du nicht die art des Index angeben.

Wenn du einen Index auf solch eine Spalte legst (ist bestimmt ein enum oder?) dann wird der das intern schon mit der für Ihn besten Struktur verwalten/anlegen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nimm an der Diskussion teil

Du kannst jetzt hier posten und Dich später registrieren. Wenn Du bereits über eine Konto verfügst, melde Dich jetzt an, um mit Deinem Konto zu posten.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung