AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Index und die Schnelligkeit
Thema durchsuchen
Ansicht
Themen-Optionen

Index und die Schnelligkeit

Ein Thema von lisamarie87 · begonnen am 23. Mai 2017 · letzter Beitrag vom 28. Mai 2017
Antwort Antwort
Seite 1 von 3  1 23      
lisamarie87

Registriert seit: 22. Mai 2017
5 Beiträge
 
#1

Index und die Schnelligkeit

  Alt 23. Mai 2017, 23:48
Datenbank: MySQL • Version: - • Zugriff über: -
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!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 00:32
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.
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#3

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 00:45
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
Do you have the email of god??? --- I have to tell him that I'm happy to be born!
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#4

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 06:30
Moin...
Zitat:
Stell dir ein Telefonbuch (ganz klassisch, aus Papier) vor.
...solche Fragen kannst du heute nicht mehr stellen. Da kriegst du "Telefonbuch aus Papier? Was ist das?" (wie mit dem Walkman )
Zitat:
Eine Tabelle kann aber mehrere "Indexspalten" haben, wenn man diese explizit anlegt.
Hier muß man vorsichtig sein. 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. 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. Für den Anfang reicht die erste bzw. zweite Normalform.

Geändert von haentschman (24. Mai 2017 um 06:45 Uhr)
  Mit Zitat antworten Zitat
lisamarie87

Registriert seit: 22. Mai 2017
5 Beiträge
 
#5

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 07:23
Hey,

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

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?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 07:57
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#7

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 08:28
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. Mein bevorzugtes ist Firebird, für den Anfang mit ZEOS(kostenlos) statt UniDAC(kostenpflichtig)...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 08:40
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. Mein bevorzugtes ist Firebird, für den Anfang mit ZEOS(kostenlos) statt UniDAC(kostenpflichtig)...
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#9

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 09:08
Zitat:
ich bin noch ein Anfänger im Bereich der Programmierung, arbeite jedoch bereits mit Datenbanken.
...
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Index und die Schnelligkeit

  Alt 24. Mai 2017, 09:43
...diese Frage stellt sich nicht.
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
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