Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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

Hallo,

und danke an alle.

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

Somit ist dies wohl doch die richtige Lösung.

Danke und MfG

korea1

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]

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.

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.

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.

Weisst du, ob es bei mysql eine Art Bitmap-index gibt? Ich brauche einen Index, der bei Spalten sinnvoll ist, wo es bloss 2 verschiedene Fälle geben kann (ZB Spalte Geschlecht m/w).

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.