it-swarm.it

NULL o NOT NULL per impostazione predefinita?

In MySQL è meglio consentire sempre valori null a meno che non si sappia che è richiesto un campo o utilizzare sempre Not Null a meno che tu non sappia che un campo conterrà valori null? O non importa?

So che in alcuni DBMS dicono di usare Not Null il più possibile perché consentire i null richiede un bit (o byte?) extra per record per memorizzare lo stato Null.

41
BenV

Nella maggior parte dei DB una colonna NOT NULL Sarà più efficiente in termini di dati memorizzati per il motivo che dichiari e anche più efficiente per eseguire query e indicizzare, quindi a meno che tu non voglia consentire NULL in una colonna, dovresti esplicitamente vietarli .

Ci sarà una leggera implicazione sulle prestazioni, dal momento che i vincoli extra NOT NULL Dovranno potenzialmente essere controllati per ogni riga interessata con qualsiasi INSERT o AGGIORNAMENTO, ma poiché la maggior parte dei database è relativamente leggera da leggere e pesante da leggere, questo è probabilmente non è un problema (è improbabile che il poco tempo extra impiegato sia evidente in ogni caso in quanto si tratta di un'operazione legata alla CPU in cui il resto dell'operazione di inserimento/aggiornamento sarà legato all'IO e quindi un collo di bottiglia molto più significativo) e ti dà alcuni dati "liberi" di controllo in modo che il tuo codice (o il codice di altre persone) non possa accidentalmente mettere NULL dove altro codice non li aspetta e quindi potrebbero dare risultati errati in loro presenza.

Modifica: Come sottolinea Peter nel suo commento, quanto sopra è un generalismo e potrebbe non essere vero per tutti DMBS, anche se sono abbastanza sicuro che lo faccia per mysql e mssql. Altre complicazioni nell'area potrebbero includere funzionalità come tabelle sparse (come ad esempio MSSQL 2008 implementato) che altereranno la dinamica delle prestazioni delle colonne (non) nullable.

25
David Spillett

Dovresti lasciare che la progettazione dello schema e i requisiti dell'applicazione guidino questa decisione. Le differenze di prestazioni non sono probabilmente evidenti in entrambi i casi nella maggior parte dei casi.

9