korea1 Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 Mit einem Index kann die Datenbank deine Abfrage schneller abarbeiten. Vorausgesetzt Du benutzt auch die Felder die in dem Index drin sind. Wie man einen Index anlegt hängt von der DB ab. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
korea1 Geschrieben 19. Januar 2005 Autor Teilen Geschrieben 19. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 Die Syntax findest Du hier. Was er in der DB mit den Feldern macht weiss ich nicht. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
korea1 Geschrieben 19. Januar 2005 Autor Teilen Geschrieben 19. Januar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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 ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saturos Geschrieben 23. Januar 2005 Teilen Geschrieben 23. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 23. Januar 2005 Teilen Geschrieben 23. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saturos Geschrieben 23. Januar 2005 Teilen Geschrieben 23. Januar 2005 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). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 24. Januar 2005 Teilen Geschrieben 24. Januar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.