it-swarm-eu.dev

Standardmäßig NULL oder NICHT NULL?

Ist es in MySQL besser, immer Nullen zuzulassen, wenn Sie nicht wissen, dass ein Feld erforderlich ist, oder immer Not Null Zu verwenden, es sei denn, Sie wissen, dass ein Feld Nullen enthält? Oder spielt es keine Rolle?

Ich weiß, dass in einigen DBMS so viel wie möglich Not Null Verwendet wird, da für das Zulassen von Nullen ein zusätzliches Bit (oder Byte?) Pro Datensatz erforderlich ist, um den Nullstatus zu speichern.

41
BenV

In den meisten DBs ist ein NOT NULL Spalte ist in Bezug auf gespeicherte Daten aus dem von Ihnen angegebenen Grund effizienter und auch effizienter in Bezug auf Abfragen und Indizierung. Wenn Sie also keine NULL-Werte in einer Spalte zulassen möchten, sollten Sie diese explizit nicht zulassen.

Es wird eine leichte Auswirkung auf die Leistung geben, da das zusätzliche NOT NULL Einschränkungen müssen möglicherweise für jede Zeile überprüft werden, die Sie mit INSERT oder UPDATE beeinflussen. Da die meisten Datenbanken jedoch relativ schreib- und leselastig sind, ist dies wahrscheinlich kein Problem (die geringe zusätzliche Zeit ist wahrscheinlich nicht erkennbar Alles in allem, da es sich um eine CPU-gebundene Operation handelt, bei der der Rest der Einfüge-/Aktualisierungsoperation an die E/A gebunden ist und somit einen viel bedeutenderen Flaschenhals darstellt Personencode) kann nicht versehentlich NULL-Werte setzen, wenn anderer Code sie nicht erwartet, und kann daher bei Vorhandensein zu falschen Ergebnissen führen.

Bearbeiten: Wie Peter in seinem Kommentar hervorhebt, ist das Obige ein Generalismus und gilt möglicherweise nicht für alle DMBSs, obwohl ich mir ziemlich sicher bin, dass dies für mysql und mssql gilt. Andere Komplikationen in diesem Bereich können Funktionen wie spärliche Tabellen (wie beispielsweise MSSQL 2008 implementiert) sein, die die Leistungsdynamik von (nicht) nullbaren Spalten ändern.

25
David Spillett

Sie sollten sich von Ihrem Schemaentwurf und den Anwendungsanforderungen leiten lassen. Die Leistungsunterschiede sind in den meisten Fällen wahrscheinlich nicht erkennbar.

9