Datenbank-Schema
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
allgemeine fragen
auftreten
durchsuchen
eindeutige identifizierung
entdecken
index
klausel
machen
meldung
nachteil
paar
packen
prozent
rufen
spalte
spalten
tabelle
unterschied
vergeben
vorkommen
-
Hi,
ein paar allgemeine Fragen zu einem Datenbankschema:
1. Auf welche Spalten ist es sinnvoll einen Index zu packen? In meiner Script kommt häufig nur ein WHERE itemID = X vor. Gelesen habe ich, dass es nur sinnvoll ist auf diese itemID dann einen Index zu packen. ALTER TABLE `itemdates` ADD INDEX ( `itemID` ). Ist das so richtig? Oder soll ich eventuell auf andere noch einen Index packen, obwohl die nicht in WHERE vorkommen.
2. itemID habe ich gleichzeitig als Primary Key eingestellt, da es nur einmal vorkommen darf, da es ja der eindeutige Identifier ist. Es kommt aber die Meldung "Die Indizes PRIMARY und itemID scheinen gleich zu sein und einer könnte möglicherweise entfernt werden.", wenn ich sowohl Primary Key als auch Index auf itemID liegen habe. Ist das schlimm? Wo liegt der Unterschied? Kann ich das so lassen?
3. Wie sieht es in einer Tabelle aus, in der itemID ausnahmsweise mal nicht Primary Key ist, da es hier auch mehrmals vorkommen darf? Auch nen Index draufpacken zwecks Geschwindigkeitssteigerung? Und wenn ja muss man eigentlich sowas wie nen Primary Key / Unique etc. immer vergeben? Ich meine mich erinnern zu könne mal gelesen zu haben, dass es sinnvoll sei sowas wie nen Primary Key immer einmal pro Tabelle vergeben zu haben, allerdings kann ich in dieser Tabelle, wo itemID ausnahmsweise mehrmals vorkommen kann (nicht muss) keine Spalte entdecken, wo ein Primary Key zu vergeben sein könnte.
4. Kann mir jmd. verständlich Unterschiede mit Vor- und Nachteilen von Primarykey, Unique, Fulltextindex,Index, etc. erklären?
Vielen Dank. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1. Du benutzt immer die Spalte als Index, die einen Datensatz identifiziert. Dieser Index muss aber nicht eindeutig sein. Es macht aber Sinn, Spalten als Index zu definieren, nach denen oft gesucht wird.
2. Primary: Eindeutige Identifizierung, jeder Wert darf nur einmal in der Tabellenspalte auftreten.
Unique: Auch hier darf jeder Wert nur einmal auftreten, sonst gibt MySQL einen Fehler aus.
Du kannst den Index "PRIMARY" ruhig löschen, wenn Du itemID als Primary erstellt hast.
3. Bei so einer Tabelle würde ich trotzdem einen Index einsetzen, um sie schnell durchsuchen zu können. Aber es kommt ganz auf den Inhalt der Tabelle an. -
Allgemein zum Index
In den folgenden Fällen sollten ein Index erstellt werde
• Eine Spalte hat grosse anzahl an werten
• Eine Spalte enthält viele NULL-Werte.
• Eine oder mehrere Spalten werden häufig gemeinsam in
einer WHERE-Klausel oder Join-Bedingung verwendet.
• Die Tabelle ist sehr groß, und die meisten Abfragen
rufen wahrscheinlich nicht mehr als 2 bis 4 Prozent der
Zeilen ab.
Mehr ist nicht immer besser
Mehrere Indiez in einer Tabelle bedeuten nicht unbedingt schnellere Abfragen. Bei jeder DMLOperation,
die für eine Tabelle mit Indizes ausgeführt wird, müssen die Indizes aktualisiert werden. Je
mehr Indizes mit einer Tabelle verknüpft sind, desto größer ist der Aufwand ....... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage