Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Index und die Schnelligkeit (https://www.delphipraxis.net/192837-index-und-die-schnelligkeit.html)

lisamarie87 23. Mai 2017 22:48

Datenbank: MySQL • Version: - • Zugriff über: -

Index und die Schnelligkeit
 
Hallo Leute,

ich bin noch ein Anfänger im Bereich der Programmierung, arbeite jedoch bereits mit Datenbanken.
Ich höre immer von vielen Programmierern, dass Indexes bei vielen Datensätzen eine deutliche Beschleunigung der Tasks hervorbringt, doch ich frage mich wie das genau funktioniert?

Würde mich freuen, wenn ich eine Antwort darauf erhalte.

Meine Tabellenstruktur sieht folgendermaßen aus:

id - name - ort - ortsteil - plz - land - timestamp

Ich habe hier über 250.000 Einträge in dieser Tabelle und frage bei einem SELECT immer den ORT ab. Wie funktioniert dort ein Index? was genau sind die Vorteile und Nachteile?

Freue mich auf euer Feedback!

Namenloser 23. Mai 2017 23:32

AW: Index und die Schnelligkeit
 
Hallo lisamarie87,

ein Index erhöht die Geschwindigkeit bei der Suche nach einer Zeile. Also sozusagen die "WHERE"-Klausel in der SQL-Abfrage. Welche Spalten du abfragst (SELECT), ist irrelevant. Also ob du "SELECT ort FROM tabelle" ausführt oder "SELECT * FROM tabelle" – das ist egal, da kann der Index nichts beschleunigen.

Wenn du aber z.B. "SELECT * FROM tabelle WHERE ort='Frankfurt'" ausführst – dann macht es einen Unterschied. Denn ohne Index müsste das DBMS alle Zeilen der Reihe nach durchgehen (Full Table Scan) und prüfen, ob die WHERE-Klausel zutrifft. Das wird natürlich immer langsamer, je mehr Einträge in der Datenbank sind. Mit Index geht es wesentlich schneller.

Stell dir ein Telefonbuch (ganz klassisch, aus Papier) vor. Wenn du zu einem Namen die Telefonnummer finden willst, dann geht das recht schnell, weil die Namen sortiert sind. Das ist die Suche mit Index. Jetzt stell dir vor, das Telefonbuch wäre nicht sortiert, sondern die Paare aus Namen und Nummern würden in zufälliger Reihenfolge drinstehen. Dann würdest du ewig nach dem richtigen Eintrag suchen. Das ist die Suche ohne Index.

Ein Index ist in der Regel als balancierter Baum umgesetzt. Es gibt aber auch andere Index-Arten, die z.B. auf Hashtabellen basieren. Alles hat seine Vor- und Nachteile.

BrightAngel 23. Mai 2017 23:45

AW: Index und die Schnelligkeit
 
Hey! Willkommen in der Delphi-Praxis! :)

Im Prinzip hat Namenloser schon das wesentliche genannt, ich würde nur noch ergänzen, dass deine spezielle Tabelle ja eine Spalte "id" hat und du diese vermutlich als Primärschlüssel (und unique) angelegt hast. Das ist auch schon ein Index der Tabelle dann.
Eine Tabelle kann aber mehrere "Indexspalten" haben, wenn man diese explizit anlegt. Das macht man über CREATE INDEX Aufrufe. An der eigentlichen SELECT, INSERT, UPDATE Anfragensyntax ändert sich dann nichts. Man hat der Datenbank durch den Index nur beigebracht, dass bestimmte Spalten (in Kombination) indiziert werden sollen (so wie Namenloser beschrieb).

Viel Spaß hier bei uns! :)

Brighty

haentschman 24. Mai 2017 05:30

AW: Index und die Schnelligkeit
 
Moin...:P
Zitat:

Stell dir ein Telefonbuch (ganz klassisch, aus Papier) vor.
...solche Fragen kannst du heute nicht mehr stellen. :stupid: Da kriegst du "Telefonbuch aus Papier? Was ist das?" :stupid: (wie mit dem Walkman :wink:)
Zitat:

Eine Tabelle kann aber mehrere "Indexspalten" haben, wenn man diese explizit anlegt.
Hier muß man vorsichtig sein. :warn: Viel hilft nicht immer viel. Der Index, ausgenommen der PrimaryKey, sollte nur auf den Feldern liegen, die auch zur WHERE Bedingung "passen". Bei Firebird z.B. hatte ich schon mal einen zusammengesetzten Index der langsamer war als die Felder mit einem separatem Index. :wink: Da hilft auch ausprobieren...

PS: Hast du dich mal mit der MySQL Lizenzfalle beschäftigt? Kämen denn andere DBMS auch in Frage?

Zitat:

ich bin noch ein Anfänger im Bereich der Programmierung, arbeite jedoch bereits mit Datenbanken.
An dieser Stelle der Hinweis auf die Normalisierung:
https://de.wikipedia.org/wiki/Normal...ng_(Datenbank)
...ein wichtiger Teil des Datenbankdesigns. 8-) Für den Anfang reicht die erste bzw. zweite Normalform. :thumb:

lisamarie87 24. Mai 2017 06:23

AW: Index und die Schnelligkeit
 
Hey,

vielen Dank schonmal für die zahlreichen Antworten! Das ging ja extrem schnell :D

Jetzt verstehe ich endlich mal, was ein Index ist und wie es anzuwenden ist. Sehr interessant!
Hab vorhin mal in meiner Tabelle ausprobiert (da einfach ein Index auf die Orts-Spalte gesetzt) und die Abfragen dauern jetzt nicht mehr so ewig. Danke euch!

@ haentschman: Was genau meinst du für eine Lizenzfalle? Davon habe ich noch nie gehört? :?:

jobo 24. Mai 2017 06:57

AW: Index und die Schnelligkeit
 
Zitat:

Zitat von lisamarie87 (Beitrag 1372596)
Hey,

@ haentschman: Was genau meinst du für eine Lizenzfalle? Davon habe ich noch nie gehört? :?:

Deswegen nennt man es ja Falle :) Wenn es jeder wüsste, wäre es keine Falle.

Du landest bei mySQL recht schnell und unwillkürlich bei dem Problem, dass es bei Verkauf Deiner Programme, die Du ggF. mit mySQL oder mySQL Client Komponenten auslieferst nicht mehr kostenlos ist.
Ich bin da nicht ganz firm, weil ich niemals mySQL einsetzen würde und es mich eigentlich nicht interessiert.

Zum Thema:
Eine Tabelle kann mehrere Indize haben.
Ein Index kann mehrere Spalten indizieren in Kombination, Reihenfolge der Spalten kann dabei von Bedeutung sein (im Verhältnis zur späteren Abfrage)
Ein Index hat einen Namen.
Eine Tabelle mit PK bekommt idr. automatisch einen Index "zugeteilt". (Man hat also Indizes in seiner DB, ohne dass man je darüber nachgedacht hat)
Ein Index ändert nicht die Funktionsweise der Tabellen (nur die Geschwindigkeit)
(Ok, im Fall "ohne Index= unendlich langsam" gewissermaßen auch die Funtkion)
Art, Verwendung und Effekt eines Index ist in jedem DB System und auch in jeder Version eines Systems anders.
Das "Gegenstück" zum Index ist der Optimizer, der vorhande Indizes analysiert und je Abfrage entscheidet, wie er sie benutzen wird.
Der Optimizer erstellt einen Ausführungsplan für jede Abfrage.
Den Ausführungsplan kann man sich anzeigen lassen, falls man sich wundert, warum die Abfrage so langsam ist.

haentschman 24. Mai 2017 07:28

AW: Index und die Schnelligkeit
 
Zitat:

Du landest bei mySQL recht schnell und unwillkürlich bei dem Problem, dass es bei Verkauf Deiner Programme, die Du ggF. mit mySQL oder mySQL Client Komponenten auslieferst nicht mehr kostenlos ist.
Noch ein paar Informationen dazu:
http://www.delphipraxis.net/182945-m...att-mysql.html
Zitat:

Die Clientbibliothek/ODBC Treiber usw.
Direkter Zugriff ist z.B. mit MyDAC/UniDAC möglich. Hierbei verbindet sich das Programm direkt mit dem server, anstatt eine Schnittstelle der Clientbibiothek zu verwenden.
http://www.devart.com/mydac/
Es gibt andere DBMS Systeme ohne die Falle. :thumb: Mein bevorzugtes ist Firebird, für den Anfang mit ZEOS(kostenlos) statt UniDAC(kostenpflichtig)...:wink:

Bernhard Geyer 24. Mai 2017 07:40

AW: Index und die Schnelligkeit
 
Zitat:

Zitat von haentschman (Beitrag 1372602)
Zitat:

Du landest bei mySQL recht schnell und unwillkürlich bei dem Problem, dass es bei Verkauf Deiner Programme, die Du ggF. mit mySQL oder mySQL Client Komponenten auslieferst nicht mehr kostenlos ist.
Noch ein paar Informationen dazu:
http://www.delphipraxis.net/182945-m...att-mysql.html
Zitat:

Die Clientbibliothek/ODBC Treiber usw.
Direkter Zugriff ist z.B. mit MyDAC/UniDAC möglich. Hierbei verbindet sich das Programm direkt mit dem server, anstatt eine Schnittstelle der Clientbibiothek zu verwenden.
http://www.devart.com/mydac/
Es gibt andere DBMS Systeme ohne die Falle. :thumb: Mein bevorzugtes ist Firebird, für den Anfang mit ZEOS(kostenlos) statt UniDAC(kostenpflichtig)...:wink:

Wenn man eine andere DB als evtl. eh schon beim Kunden im Einsatz ist, so hat man das Problem das man damit auch die veranwortung für das DBMS übernimmt (Backup, Desaster Recovery, ...). Setzt man auf ein DBMS das schon beim Kunden im Einsatz ist, so hat man hier kein Probleme.

haentschman 24. Mai 2017 08:08

AW: Index und die Schnelligkeit
 
Zitat:

ich bin noch ein Anfänger im Bereich der Programmierung, arbeite jedoch bereits mit Datenbanken.
...:gruebel:
Zitat:

Wenn man eine andere DB als evtl. eh schon beim Kunden im Einsatz ist, so hat man das Problem das man damit auch die veranwortung für das DBMS übernimmt (Backup, Desaster Recovery, ...). Setzt man auf ein DBMS das schon beim Kunden im Einsatz ist, so hat man hier kein Probleme.
...diese Frage stellt sich nicht. :P

jobo 24. Mai 2017 08:43

AW: Index und die Schnelligkeit
 
Zitat:

Zitat von haentschman (Beitrag 1372606)
...diese Frage stellt sich nicht. :P

Naja, ich denke aus Bernhards Hinweis spricht viel Erfahrung und einem Anfänger dieses Thema abzusprechen wäre anhand der Infos hier glaub ich etwas Bevormundung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz