Frage

Ich habe ein Feld in einer Datenbank, die nahezu einzigartig ist: Die Werte werden 98% der Zeit einzigartig, aber es kann einige Duplikate hat. Ich werde nicht viele Suchanfragen auf diesem Gebiet tun; sagt zweimal im Monat. Die Tabelle hat derzeit ~ 5000 Datensätze und wird etwa 150 pro Monat gewinnen.

Sollte dieses Feld haben einen Index?

Ich bin mit MySQL.

War es hilfreich?

Lösung

Ich denke, die ‚fast einzigartig‘ ist wahrscheinlich eine falsche Fährte. Die Daten werden entweder einmalig oder es ist nicht, aber das bestimmt nicht, ob Sie es zu indizieren aus Performance-Gründen wünschen würden.

Antwort:

5000 Datensätze sind wirklich nicht viele überhaupt, und unabhängig davon, ob Sie einen Index haben, sucht immer noch schnell sein. Bei dieser Rate von Einsätzen, wird es Ihnen in 3 Jahre dauern, bis 10000 Datensätze zu erhalten, die nach wie vor ist auch nicht viele.
Ich persönlich würde nicht die Mühe mit einem Index hinzufügen, aber es würde keine Rolle, ob du getan hast.

Erklärung:

Was Sie müssen darüber nachdenken, bei der Entscheidung, einen Index hinzuzufügen, ist der Kompromiss zwischen Einführungsgeschwindigkeit und Auswahl Geschwindigkeit.

Ohne Index auf diesem Gebiet eine select tun bedeutet, dass MySQL jede einzelne Zeile zu Fuß über hat und jedes einzelnes Feld lesen. Hinzufügen eines Index verhindert dies.

Der Nachteil des Index ist, dass jedes Mal Daten eingefügt werden, hat die DB den Index zusätzlich zum Hinzufügen der Daten zu aktualisieren. Dies ist in der Regel ein kleiner Aufwand, aber Sie würden es wirklich bemerken, wenn Sie Lasten von Indizes hatten, und waren viel schreibt tun.

Bis Sie so viele Zeilen in der Datenbank erhalten, würden Sie einen Index so wie man will, da sonst Ihr wählt den ganzen Tag dauern würde, aber es ist nur etwas bewusst zu sein, so dass Sie am Ende nicht Indizes für das Hinzufügen Felder „für den Fall, ich brauche es“

Andere Tipps

Das ist nicht sehr viele Datensätze überhaupt; Ich würde nicht die Mühe, alle Indizes an diesem Tisch. Die relative Einzigartigkeit des Feldes ist irrelevant -. Auch auf Jahre alte Standard-Hardware ich auf der Tabelle eine Abfrage erwarten würde einen Bruchteil einer Sekunde nehmen

Sie können die allgemeine Faustregel gilt: optimieren, wenn es ein Problem wird. Nur nicht einen Index verwenden, bis Sie Sie bemerken einen braucht.

Von dem, was Sie sagen, es klingt nicht wie ein Index erforderlich ist. Faustregel Indexfelder, die in SELECTS viel verwendet werden, um die Suche zu beschleunigen, was wiederum (können) verlangsamt Einfügungen und Aktualisierungen.

Auf einem Re-Cord so klein wie deine, ich glaube nicht, dass Sie viel von einer realen Welt so oder so getroffen sehen.

Wenn Sie nur auf, es zu tun suchen werden zweimal im Monat und das, dass nur wenige Zeilen, dann würde ich sagen, nicht indizieren. Es ist alles, aber nutzlos.

Nein. Es gibt nicht viele Aufzeichnungen und es wird nicht häufig abgefragt werden. Keine Notwendigkeit zu indizieren.

Es ist wirklich ein Urteil nennen. Mit solch einem kleinen Tisch kann man einigermaßen schnell, ohne einen Index suchen, so könnte man ohne sie auskommt.

Auf der anderen Seite sind die Kosten, einen Index zu erstellen Sie nicht wirklich tun müssen, ist ziemlich niedrig, so dass Sie Einsparung selbst nicht viel von nicht es zu tun.

Auch, wenn Sie den Index zu tun erstellen, sind Sie für die Zukunft gedeckt, wenn Sie plötzlich bekommen 1000 neue Datensätze / Woche beginnen. Möglicherweise wissen Sie genug über die Situation sicher zu sagen, dass das wird nie passieren, aber die Anforderungen habe eine Art und Weise zu verändern, wenn man es am wenigsten erwartet.

EDIT: Soweit Anforderungen ändern, um die Sache zu prüfen, ist dies: Wenn die DB wächst und Sie später herausfinden, dass Sie einen Index benötigen, können Sie einfach den Index erstellen und zu tun? Oder werden Sie auch eine Menge Code ändern müssen, um die Verwendung des neuen Index machen?

Es hängt davon ab. Wie andere angesprochen haben, gibt es einen Kompromiss zwischen Tabellenaktualisierungsgeschwindigkeit und Auswahl Geschwindigkeit. Tabelle Update enthält Einfügungen, Aktualisierungen und Löschungen auf dem Tisch.

Eine Frage, die Sie nicht behandelt. Hat die Tabelle einen Primärschlüssel und einen entsprechenden Index? Eine Tabelle ohne Indizes in der Regel profitiert Form mindestens einen Index. Der häufigste Weg, diesen Index zu bekommen ist ein Primärschlüssel zu erklären, und verlassen sich auf die DBMS einen Index entsprechend zu erzeugen.

Wenn eine Tabelle keine Kandidaten für Primärschlüssel hat, die in der Regel einen schweren Fehler in der Tabelle Design zeigt. Das ist ein anderes Thema und soll eine spearate Diskussion erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top