Fragen zu Indizes und Mehrfach-Indizierung



Hallo NG!

Folgende Tabelle sei gegeben:

CREATE TABLE `images` (
`id` int(10) unsigned NOT NULL auto_increment,
`directory` int(10) unsigned NOT NULL,
`filename` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
)

(Die Tabelle enthält noch weitere Felder, die aber hier nichts zur Sache tun.)

Nachdem jede Kombination aus "directory" und "filename" einzigartig sein soll, habe ich einen UNIQUE-Index zusammen über diese beiden Spalten angelegt. Soweit, so gut.
Um die beiden Spalten aber bei Bedarf auch separat performant durchsuchen zu können, wollte ich zusätzlich jeder Spalte für sich noch einen INDEX zusätzlich geben. (Soweit ich die Doku verstanden habe, gibt MySQL z.B. bei einer WHERE-Bedingung in nur einer Spalte einem entsprechenden Einspalten-Index den Vorzug gegenüber einem Mehrspalten-Index.)

Nach dem Anlegen aller drei Indizes meckert PHPmyAdmin (ja, ja, ich kenne das Gruppenmantra... :-)) "Es sollte nicht mehr als ein Index des Typs INDEX für die Spalte `filename` gesetzt sein".
Jetzt frage ich mich: Ist an dieser Behauptung 'was dran oder erzählt PMA Blödsinn? Falls ersteres: Warum ist das so und welche negativen Konsequenzen habe ich zu befürchten, falls ich die Mehrfachindizierung beibehalte?
Und was wären Eurer Meinung nach ggf. sinnvolle Alternativen? Auf den separaten `filename`-INDEX verzichten und dafür `filename` in der UNIQUE-Index-Definition an erste Stelle schreiben?
Haltet Ihr so eine Mehrfach-Indizierung überhaupt für eine gute Idee oder sollte der UNIQUE-Index alleine in der Praxis doch ausreichen?


TIA,

Sebastian
.



Relevant Pages

  • =?Utf-8?Q?Re:_SQL_-_Wie_mit_Parameter_=28Str?= =?Utf-8?Q?ing=29__NULL_=C3=BCbergeben=3F?
    ... unique index nur eine Spalte, ... Die nullable Spalte ... aus der Tabelle entfernen, eine neue Tabelle anlegen, die diese Werte enthält ... (NOT NULL) ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Fragen zu Indizes und Mehrfach-Indizierung
    ... `directory` intunsigned NOT NULL, ... (Soweit ich die Doku verstanden habe, gibt MySQL z.B. bei einer WHERE-Bedingung in nur einer Spalte einem entsprechenden Einspalten-Index den Vorzug gegenüber einem Mehrspalten-Index.) ... Eigentlich sollte ein INDEX auf die im UNIQUE als zweite stehende Spalte ausreichen, denn der UNIQUE ist gleichzeitig ein INDEX auf seine erste Spalte. ...
    (de.comp.datenbanken.mysql)
  • Re: Spalte mit Default-Constraint =?ISO-8859-1?Q?l=F6schen?=
    ... @sql und das EXEC schenken, ... Spalte hat bei einigen Datenbanken einen Defaultwert bei anderen ... id int not null identityPRIMARY KEY, ... DECLARE @tablename nvarchar ...
    (microsoft.public.de.sqlserver)
  • Re: Warum wird bei Between kein Index genutzt?
    ... `field_id` intunsigned NOT NULL AUTO_INCREMENT, ... Wenn ich mir nun das Vorgehen von MySQL bei dem Query via EXPLAIN ... Pack auch gleich noch SHOW INDEX FROM map dazu. ...
    (de.comp.datenbanken.mysql)
  • Re: Frage zu Indexen
    ... Wobei vermutlich einige der Spalten eh schon ... Nur bedingt ideal wegen des NOT INsiehe unten. ... Wobei das nur von Belang wäre wenn ein grosser Kostenanteil ... einen Index über selektive Spalten und den Optimierer ...
    (microsoft.public.de.sqlserver)