Mal ne grundsatzfrage bzgl Indexes

MySQL, PostgreSQL, SQLite
theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Mal ne grundsatzfrage bzgl Indexes

Post by theomega » 2006-09-29 01:47

Hallo Leute,
nachdem es ja sinvoll ist auf den Feldern nach denen man sortieren will einen Index zu haben stoße ich auf ein Problem: Ich will die Daten nach jedem Feld sortieren können wie ich will. Nehmen wir also mal weiter an ich würde auf jedes meiner Felder einen Index anlegen, hätten dann die Indexe überhaupt noch einen Sinn?

Versteht jemand was ich meine?

Danke
TO

snowball
Posts: 218
Joined: 2004-09-15 10:14

Re: Mal ne grundsatzfrage bzgl Indexes

Post by snowball » 2006-09-29 08:39

Hi,
theomega wrote: ...hätten dann die Indexe überhaupt noch einen Sinn?
Soweit mir bekannt ist, machen die auch dann noch einen Sinn. Aber der schreibenede Zugriff auf deine DBs wird langsamer werden je mehr Indexe du setzt, da jedesmal der Index mit akualisiert wird.

Cheers,
Jochen

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Mal ne grundsatzfrage bzgl Indexes

Post by isotopp » 2006-10-02 14:43

theomega wrote:nachdem es ja sinvoll ist auf den Feldern nach denen man sortieren will einen Index zu haben stoße ich auf ein Problem: Ich will die Daten nach jedem Feld sortieren können wie ich will.
In

SELECT c FROM t WHERE a = 17 ORDER BY b

kann ein Index auf a verwendet werden, um die Datensätze mit dem Wert a=17 schnell zu finden (where used im Explain).

kann ein Index auf (a,b) verwendet werden, um die Datensätze mit dem Wert a=17 schnell zu finden und in b-Reihenfolge sortiert auszugeben (using temporary; using filesort verschwindet im Explain).

kann ein Index auf (a,b.c) verwendet werden, um einen Covering Index zu erzeugen. Zugriffe auf die Daten finden nicht mehr statt, es werden sehr viel weniger Seeks verwendet (where used, using index im EXPLAIN).

kann ein Index auf (b), (c) oder (b,c) nicht verwendet werden.

Dein Problem ist also komplizierter.

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: Mal ne grundsatzfrage bzgl Indexes

Post by theomega » 2006-10-02 19:56

Was ist eigentlich wenn ich zuviele Indexe anlege? Beim Select kostet mich dass doch nichts oder, nur das Insert dauert länger?! Stimmt das soweit?

Dank dir
TO

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Mal ne grundsatzfrage bzgl Indexes

Post by isotopp » 2006-10-02 22:01

theomega wrote:Was ist eigentlich wenn ich zuviele Indexe anlege? Beim Select kostet mich dass doch nichts oder, nur das Insert dauert länger?! Stimmt das soweit?
Ein Index kostet Dich CPU/Disk IO und Speicher. Bei allen Operationen, die Daten verändern muß jeder Index auf diesen Daten mitgepflegt werden. Wenn Du also ein INSERT, UPDATE, DELETE auf Spalte b in t, ALTER TABLE t CHANGE COLUMN b oder sonst etwas mit b machst, dann muß immer auch jeder Index mitgepflegt werden, der b enthält. Das verbraucht (ein wenig) CPU und (ein wenig mehr) Disk I/O.

Außerdem hat MySQL einen MyISAM Key Cache bzw den InnoDB Buffer Pool. Je mehr Index Du hast, um so mehr Index Memory mußt Du bereit stellen, bzw bei gleicher Speichermenge wird das Verhalten des Servers immer disklastiger.

Unterindizierung kostet Dich potentiell sehr viel - eine Query ohne Index kann wenige Prozent bis viele hundert Mal langsamer als eine Query mit dem passenden Index sein. Überindizierung ist meist nicht so tödlich wie Unterindizierung - ein Index zu viel kostet Dich einige Prozent Performance, wenn die betreffende Spalte viel Schreibaktivität sieht. Überindizierung kann Dich nur dann viel Performance kosten, wenn es genau dieser Index ist, der verhindert, daß Du memory bound bist.