Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sinnvolle einsatz von Indexe bei MYSQL (https://www.delphipraxis.net/63357-sinnvolle-einsatz-von-indexe-bei-mysql.html)

Karstadt 17. Feb 2006 14:55

Datenbank: MYSQL • Version: 4.1 • Zugriff über: mydac

Sinnvolle einsatz von Indexe bei MYSQL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo. Habe 3000 DS. Haben folgenden Tabelle.

Wie kann ich das Indexfeld am sinnvolsten nutzen.

Momentan benutze ich diesen Feld garnicht.

Danke.

kabuco 17. Feb 2006 15:35

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Kommt darauf an, was du machen willst! Was wills du denn damit erreichen? Oder weist du nicht, was du alles damit machen kannst?

Chewie 17. Feb 2006 15:37

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Grundsätzlich lohnt es sich einen Index auf eine Spalte zu setzen, die in der WHERE-Klausel vorkommt.

Tubos 17. Feb 2006 15:44

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Und auf eine Spalte die in der ORDER BY Klausel vorkommt.

Chewie 17. Feb 2006 17:19

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Oder by GROUP BY...

OK, also eigentlich immer dort, wo diese Spalte als ein Kriterium zum Filtern, Sortieren etc. dient.

Elvis 17. Feb 2006 17:35

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Zitat:

Zitat von Chewie
Oder by GROUP BY...

OK, also eigentlich immer dort, wo diese Spalte als ein Kriterium zum Filtern, Sortieren etc. dient.

Richtitch, aber man sollte die Spalten-/Zeilenanzahl möglichst klein halten, die man Vergleichen/Indizieren muss. Brachiales Normalisieren bis zum Umkippen ist da meine Herangehensweise.
Was nur einmal da ist, muss auch nur einmal Sortiert, Gefiltert, Gruppiert,... werden.

jfheins 17. Feb 2006 17:35

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Und ... was bringt das ?
Was wird (damit) gemacht, wenn eine Spalte als Index/Primärschlüssel definiert wird ?

Elvis 17. Feb 2006 17:40

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Zitat:

Zitat von jfheins
Und ... was bringt das ?
Was wird (damit) gemacht, wenn eine Spalte als Index/Primärschlüssel definiert wird ?

Da hätte ich doch glatt mal die Suche bemüht, könnte vllt sogar sowas dabei rauskommen...

jfheins 17. Feb 2006 17:48

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
*unauffällig pfeif* :wall:

Danke ... ;)

Karstadt 17. Feb 2006 21:00

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Muss der Indexfeld ein Integerfeld sein, müssen die Einträge einmalig sein. (keine redundanz?) Kann ich ein Index auf Zeitraum setzen?

Wofür ist die Eingeschaft IndexFieldName gut (ich habe MYSQL)


F1 =

Bei SQL-Tabellen müssen die angegebenen Spalten nicht indiziert sein.

:wiejetzt:

delphilevi 21. Feb 2006 18:51

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
ob und wie viele indices erzeugt werden sollten, hängt auch von dem verhältnis select-abfragen zu update und insert abfragen ab.

bei mysql datenbanken schaue dir mal das mysql-verzeichnis an.
pro datenbank ein verzeichnis und pro
tabelle (z.B. tab1) gibt es eine tab1.frm, tab1.ind und tab1.dta (oder so ähnlich die letzte mysql ist schon 13 monate her):

nach jedem update, insert wird letztlich die index-Datei neu aufgebaut.
je höher die anzahl der indices, desto größer die index-Datei und umso langsamer insert und update.

den größten geschwindigkeits-zuwachs bekommst du durch serverseitiges ausführen der sql-anweisungen.

Karstadt 21. Feb 2006 18:59

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Kurz gesagt. Besser Select eingrenzen als Indexe benutzen (oder Select mit Indexen). Wollstest du das sagen?

delphilevi 22. Feb 2006 08:58

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
kurz kann ich nicht :-D

eine ablaufbeschreibung:

tab1
f1 f2 ohne index
1 20060222
2 20060221

tab1
f1 f2 index auf f2
1 20060222 position 2 (immer zahlen)
2 20060221 position 1

select * from tab1 order by f2

im ersten fall verarbeitet die mysql die abfrage indem sie 20060222 <= 20060221 prueft
im zweiten fall läuft die prüfung auf den index --> sehr viel schneller als 1 insbesondere wenn f2 = langer string

aber:
update tab1 set f2=20060223 where f1=2 ist im ersten fall schneller da es keinen index zum reorganisieren gibt.

ach ja: ist die select abfrage komplex (viele funktionen) kann es passieren, daß die indices nicht verwendet werden: select * from tab1 order by datediff(f2,20060101)/365

noch 'n tipp:
gut: select * from tab1 where (grosse einschraenkung) and (weniger grosse einschraenkung)
schlecht: umgekehrt

gut: insert into temp (select * from riesig where (einfach zu berechnen))
select * from temp where (komplex)
schlecht: select * from riesig where (komplex) and (einfach zu berechnen)

die index-datei ist vereinfacht dargestellt.
o'reilly mysql hat mir sehr geholfen.

hilfe bei index-entscheidungen: tabellenstruktur und liste mit sql-statements, groesse der tabellen
und verhaeltnis von select zu insert/update posten :thumb:

Elvis 22. Feb 2006 09:10

Re: Sinnvolle einsatz von Indexe bei MYSQL
 
Was ist denn an den Infos in dem und deinen anderen Threads so schwer zu verstehen?
Zum 5000-sten Mal: Ein Index muss nunmal aus deinen Daten generiert werden und er beschleunigt auch nur gezielte Zugriffe (Filtern, Gruppieren, Sortieren). Jeglicher schreibender Zugriff bedeutet, dass der Index invalid und in manchen DBs sogar sofort neu berechnet werden muss.
Kann doch nicht so schwer sein, daraus Schlüsse ziehen zu können.
Zitat:

Zitat von Karstadt
Kurz gesagt. Besser Select eingrenzen als Indexe benutzen (oder Select mit Indexen). Wollstest du das sagen?

Hmpf? Was soll man da noch sagen...

Du kannst doch nicht anfangen ein Programm zu schreiben ohne die mit den verwendeten Technologien wenigstens _ansatzweise_ vertraut zu machen. :|
*Sich langsam wie in einer Excel/Access-Mailinglist vorkommt :wall: *


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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