2010-01-07 6 views
5

Kürzlich habe ich darüber nachgedacht, ob es sich lohnt, 1 Tabelle mit vielleicht vielen NULL-Spalten zu haben, oder ob es besser ist, mehr Tabellen ohne NULL zu haben. Ich habe gehört, dass NULL nicht auf InnoDB gespeichert ist, also habe ich mich gefragt, ob es irgendwelche Nachteile oder Probleme mit einer Reihe von Zeilen mit vielen NULL gibt. Ich habe immer gehört, dass häufige NULLs schlecht sind, aber ich habe nie wirklich erfahren warum. Diese werden übrigens bei Fremdschlüsseln NULL sein, wenn das überhaupt zählt.Wie wirkt sich NULL auf MySQL-Tabellen aus? (InnoDB)

Ein zweiter Zweifel, gibt es irgendwelche Leistungsproblem, wenn ich INNER JOIN für Spalten verwenden, die viel NULL haben? Wenn ich zum Beispiel 4 Fremdschlüssel habe und 4 INNER JOINs mache, aber höchstwahrscheinlich nur 1 von ihnen nicht NULL ist, wird das die Performance beeinflussen? Dank

Antwort

6

See:

NULLs indiziert sind.

In InnoDB können Sie die Speicheranforderungen für Ihre Datenzeile reduzieren, indem Sie NULL verwenden.

+0

Hallo Bill, danke für deine Antwort. Ich möchte mehr über die Auswirkungen von INNER JOIN auf Spalten mit vielen NULL-Werten wissen. Ist das schlecht? – Clash

+1

Ich kann keine quantitativen Messungen angeben, aber ich glaube, jeder Leistungsunterschied wäre vernachlässigbar. Sie sollten sich definitiv besser auf Leistungsverbesserungen konzentrieren, die besser für das Geld sorgen, wie EXPLAIN verwenden und intelligent zwischenspeichern. –

2

Im Buch High Performance MySQL: Optimierung, Backups, Replikation und Mehr von Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy Zawodny, Arjen Lentz und Derek J. Balling, sagt Tabellenspalten, die NULL-Werte zulassen Machen Sie es für MySQL schwieriger, Abfragen zu optimieren, die sich auf Nullable-Spalten beziehen. Wenn eine Nullable-Spalte indiziert wird, erfordert sie ein zusätzliches Byte pro Eintrag und kann dazu führen, dass ein Index mit fester Größe (z. B. ein Index für eine einzelne Integer-Spalte) in MyISAM in eine Variable mit variabler Größe konvertiert wird. Sie sagen, wenn Spalten einen fehlenden Wert haben müssen, um stattdessen 0 für ganze Zahlen, ein Sonderzeichen oder eine leere Zeichenfolge zu verwenden. Vermeiden Sie NULL und NOT NULL wann immer möglich.

+0

gleich auf mysql offiziellen doc. http://dev.mysql.com/doc/refman/5.5/en/data-size.html – navy

Verwandte Themen