Zum Inhalt springen

Indexierung von Feldern


korea1

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

Link zu diesem Kommentar
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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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

Link zu diesem Kommentar
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]

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

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

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...