2016-11-01 6 views
0

Eine sehr einfache Datenbank-Design-Frage:MySQL InnoDB Indizierung Verwirrung

Ich bin eine sehr große Tabelle mit den folgenden Spalten zu erstellen: EMPLOYEE_NAME (VARCHAR), Employee_ID (INT), Employee_Birthday (INT).

Ich möchte eine einzelne Spalte B-Tree-Index für Employee_ID erstellen, wie viele meiner Abfragen SELECT und WHERE-Klauseln basierend auf den Werten in dieser Spalte verwenden.

Obwohl ich die Employee_ID, die einmal erstellt wurde, nicht aktualisieren werde, werde ich häufig neue Mitarbeiter in diese Tabelle einfügen.

Erzeugt das Hinzufügen von Zeilen mit einer indizierten Spalte zusätzliche Kosten im Vergleich zu keiner Indexierung? Oder gelten die zusätzlichen Kosten nur beim Aktualisieren vorhandener Zeilen?

+0

Datenbank-Design-Fragen sind besser geeignet für dba.stackexchange.com. – Barmar

Antwort

1

Bei der Bewertung der Erstellung eines Index lautet die KEY-Frage: Wäre diese Tabelle MEISTEN für Abfragen oder für INSERTIONS zugegriffen. Außerdem müssen Sie angeben, was Sie unter sehr große Tabelle verstehen (da Sie über Mitarbeiter sprechen, würde ich vermuten, dass die Tabelle vielleicht weniger als 100K Datensätze hosten würde, oder?). Wenn Sie erwarten, sagen wir, Tausende von INSERTs für jede SELECT, könnten Sie versuchen, ohne Index zu gehen. Wenn Sie dagegen hauptsächlich die Tabelle abfragen, ist das Setzen eines Index in Ihrer Spalte Employee_ID der richtige Weg.

2

Erstellen Sie Indizes basierend auf den typischen SELECTs, UPDATEs und DELETEs. Mach dir keine Sorgen über INSERTs; Der Overhead für einen INSERT ist viel weniger als die Beschleunigung für die anderen Operationen.

Mit InnoDB gibt es immer eine PRIMARY KEY, also können Sie es auch etwas nützliches für Sie machen.