Textindizes und ganzzahlige Indizes in mysql

8

Ich habe immer versucht, einen ganzzahligen Primärschlüssel auf einer Tabelle zu haben, egal was passiert. Aber jetzt frage ich, ob das immer nötig ist.

Nehmen wir an, ich habe eine Produkttabelle und jedes Produkt hat eine weltweit eindeutige SKU-Nummer - das wäre eine Zeichenfolge mit etwa 8-16 Zeichen. Warum nicht das PK machen? Normalerweise würde ich dieses Feld zu einem eindeutigen Index machen, aber dann ein automatisch erhöhtes int-Feld als PK haben, da ich annahm, es wäre schneller, einfacher zu warten und würde mir erlauben, Dinge wie die letzten 5 Datensätze einfach hinzuzufügen.

Aber in Bezug auf die Optimierung, unter der Annahme, dass ich immer nur das Volltextfeld abgleichen würde und als nächstes Textabgleich-Abfragen (zB wie %%), können Sie sich Gedanken über Gründe machen, keinen textbasierten Primärschlüssel zu verwenden wahrscheinlich vom Typ varchar ()?

Prost, imanc

    
user307927 05.04.2010, 11:33
quelle

2 Antworten

6

Es ist sinnvoll, die SKU-Nummer als Primärschlüssel zu verwenden. Sie können es indizieren, um die Suche nach SKU schnell zu machen. Und SKU ist ein natürlicher Index .

Allerdings hat es einige Strafen:

  • Leistung (wie Coronatus sagte)

  • Mangelnde Designflexibilität. Wenn die SKU aus irgendeinem Grund nicht mehr global eindeutig ist, müssen Sie nicht nur die Tabellenstruktur, sondern auch alle Ihre Abfragen ändern.

  • Wenn Sie die Artikelnummer eines Artikels ändern, müssen Sie alle Beziehungen in der Datenbank ändern.

borjab 05.04.2010, 11:55
quelle
-2

Computer sind beim Vergleichen von Zahlen viel schneller als Strings.

Außerdem enthalten MySQL-Indizes von Strings standardmäßig nur die ersten vier Buchstaben.

Wenn Sie Zeichenketten blabfoo, blabbar, blabboo haben, ist der Index völlig unbrauchbar, weil die ersten 4 Zeichen gleich sind, so dass eine Suche nach "blabf" anfänglich ALLEN 3 Zeichenketten entspricht und dann über die Ergebnisse iteriert.

Verwenden Sie grundsätzlich keine Zeichenfolgen für Indizes, da sie langsam sind und mehr Platz benötigen.

    
Amy B 05.04.2010 11:39
quelle

Tags und Links