sql >> Databasteknik >  >> RDS >> Mysql

NULL i MySQL (prestanda och lagring)

Det beror på vilken lagringsmotor du använder.

I MyISAM-format innehåller varje radrubrik ett bitfält med en bit för varje kolumn för att koda NULL-tillståndet. En kolumn som är NULL tar fortfarande upp utrymme, så NULL minskar inte lagringen. Se https://dev.mysql.com/doc/internals/ sv/myisam-introduction.html

I InnoDB har varje kolumn en "fältstartoffset" i radhuvudet, vilket är en eller två byte per kolumn. Den höga biten i det fältets startoffset är på om kolumnen är NULL. I så fall behöver kolumnen inte lagras alls. Så om du har många NULLs bör ditt lagringsutrymme minskas avsevärt. Se https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

EDIT:

NULL-bitarna är en del av radrubrikerna, du väljer inte att lägga till dem.

Det enda sättet jag kan föreställa mig att NULLs förbättrar prestandan är att i InnoDB kan en sida med data passa fler rader om raderna innehåller NULL. Så dina InnoDB-buffertar kan vara mer effektiva.

Men jag skulle bli mycket förvånad om detta ger en betydande prestandafördel i praktiken. Att oroa sig för effekten NULL har på prestanda är mikrooptimering. Du bör fokusera din uppmärksamhet någon annanstans, i områden som ger större valuta för pengarna. Till exempel att lägga till väl valda index eller öka tilldelningen av databascache.



  1. Enkelt Postgresql-uttalande - kolumnnamnet finns inte

  2. Ta bort ett databaspostkonto (SSMS)

  3. Flera urvalssatser i en enda fråga

  4. Finns det något sätt att spola ut utdata från PL/SQL i Oracle?