sql >> Database teknologi >  >> RDS >> Mysql

NULL i MySQL (Performance &Storage)

Det afhænger af, hvilken lagermotor du bruger.

I MyISAM-format indeholder hver rækkeoverskrift et bitfelt med en bit for hver kolonne for at kode NULL-tilstand. En kolonne, der er NULL, fylder stadig, så NULL reducerer ikke lagerpladsen. Se https://dev.mysql.com/doc/internals/ da/myisam-introduction.html

I InnoDB har hver kolonne en "feltstartforskydning" i rækkeoverskriften, som er en eller to bytes pr. kolonne. Den høje bit i dette felts startforskydning er aktiveret, hvis kolonnen er NULL. I så fald behøver kolonnen slet ikke at blive gemt. Så hvis du har mange NULL'er, skulle din lagerplads være væsentligt reduceret. Se https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

EDIT:

NULL-bittene er en del af rækkeoverskrifterne, du vælger ikke at tilføje dem.

Den eneste måde, jeg kan forestille mig, at NULL'er forbedrer ydeevnen på, er, at i InnoDB kan en side med data passe til flere rækker, hvis rækkerne indeholder NULL'er. Så dine InnoDB-buffere kan være mere effektive.

Men jeg ville blive meget overrasket, hvis dette giver en væsentlig præstationsfordel i praksis. Bekymring om effekten NULL'er har på ydeevnen er i området for mikrooptimering. Du bør fokusere din opmærksomhed andre steder, i områder, der giver større valuta for pengene. For eksempel tilføjelse af velvalgte indekser eller forøgelse af databasecacheallokering.



  1. Sådan fungerer TRY_CAST() i SQL Server

  2. Hvornår skal jeg bruge en tabelvariabel vs midlertidig tabel i sql-serveren?

  3. Hvordan arbejder man med PGpoint for Geolocation ved hjælp af PostgreSQL?

  4. SYS_GUID() Funktion i Oracle