Seite 1 von 1

doppelter INDEX?

Verfasst: 27.10.2006 22:21
von Gumfuzi
Hallo!

habe eben entdeckt, dass ich in der phpbb_topics einen INDEX auf "forum_id" und einen auf "forum_id_2" habe. Der 2. hat als Felder sogar " forum_id topic_poster topic_first_post_id topic_last_post_id" drinstehen.
Da ich keine forum_id_2 habe, nehme ich an dass da was doppelt gemoppelt ist...

Code: Alles auswählen

 Indizes:
Name 	Typ 	Kardinalität 	Aktion 	Feld
PRIMARY 	PRIMARY 	6266  	Bearbeiten 	Löschen 	topic_id
forum_id 	INDEX 	65  	Bearbeiten 	Löschen 	forum_id
topic_moved_id 	INDEX 	8  	Bearbeiten 	Löschen 	topic_moved_id
topic_status 	INDEX 	3  	Bearbeiten 	Löschen 	topic_status
topic_type 	INDEX 	3  	Bearbeiten 	Löschen 	topic_type
forum_id_2 	INDEX 	6266  	Bearbeiten 	Löschen 	forum_id
topic_poster
topic_first_post_id
topic_last_post_id
topic_title 	FULLTEXT 	6266  	Bearbeiten 	Löschen 	topic_title
Kann ich den gefahrlos löschen? also den forum_id_2-Index?

*edit*
in phpmyadmin steht sogar noch drunter:
Es sollte nicht mehr als ein Index des Typs INDEX für die Spalte `forum_id` gesetzt sein
Kann soetwas die Datenbank etwas verlangsamen?

*edit 2*
bei der phpbb_posts habe ich auch doppelt einen Index drin

Verfasst: 27.10.2006 23:13
von Miriam
Wenn die Spalte, die den Index darstellt garnicht da ist, solltest Du diesen Index löschen.
Ein Index (gern über mehrere Spalten) soll den Zugriff auf die Daten effektiver (also schneller) machen, da diese sozusagen wie in einem Inhaltsverzeichnis gelistet werden.

Die Frage ist nur: Wie kommt die Definition dieser Spalte als Index zustande?

Verfasst: 27.10.2006 23:20
von Gumfuzi
Das frage ich mih auch. habe schon ein paar Threads dazu gelesen, aber in keinem stand drin, wie das kam.
In keiner meiner MOD-Anleitungen steht so ein Befehl drin.

Kannn ich den doppelten Index gefahrlos löschen?
Verlangsamt ein doppelter Index die Datenbank?

P.S.: wird das ev. dann gebraucht, wenn man bei einer SQL-Abfrage 2x die gleiche Tabelle abfragt, zb:

Code: Alles auswählen

SELECT ... FROM phpbb_topics t, phpbb_topics t2, ...
Solche Abfragen gibt es ja auch...

Verfasst: 28.10.2006 14:15
von Miriam
SELECT kannst Du prinzipiell auch von nicht vorhandenen Tabellenspalten machen. Es wird nur ein Fehler zurückgegeben.

Ein Index erfordert Verwaltungsaufwand. Das, was die DB vorher (also vor der Abfrage) darin investiert hat, kommt nachher der Abarbeitung der Abfrage zu gute. Wenn es keine Spalte gibt und auch dort keine indizierbaren Werte vorhanden sind, bringt der Index nur Verwaltungsaufwand.... aber keinen Nuntzen.

Und bzgl. Deiner Abfrage, die Du gepostet hast, kann ich Dir sagen, dass die nichts mit diesem Index zu tun hat. Denn die Tabelle, die generiert wird ist eine "virtuelle", die aus Abfragenergebnissen zusammengebaut wird. Aber Abfragen können eben nur bei wirklich vorhandenen Werten in den Spalten Ergebnisse bringen.

Also ich sehe keinen Nutzen in diesem speziellen Index. Aber vllt sieht das ein DB Profi anders. *wer weiss?*

Verfasst: 28.10.2006 18:31
von Gumfuzi
OK, danke erstmal.