sql >> Database >  >> RDS >> Mysql

NULL in MySQL (prestaties en opslag)

Het hangt af van welke opslagengine je gebruikt.

In MyISAM-indeling bevat elke rijkop een bitveld met één bit voor elke kolom om de NULL-status te coderen. Een kolom die NULL is, neemt nog steeds ruimte in beslag, dus NULL's verminderen de opslag niet. Zie https://dev.mysql.com/doc/internals/ nl/myisam-introductie.html

In InnoDB heeft elke kolom een ​​"veldstart-offset" in de rijkop, die één of twee bytes per kolom is. De hoge bit in dat veld start offset is aan als de kolom NULL is. In dat geval hoeft de kolom helemaal niet te worden opgeslagen. Dus als je veel NULL's hebt, moet je opslag aanzienlijk worden verminderd. Zie https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

BEWERKEN:

De NULL-bits maken deel uit van de rijkoppen, u kiest er niet voor om ze toe te voegen.

De enige manier waarop ik me kan voorstellen dat NULL's de prestaties verbeteren, is dat in InnoDB een pagina met gegevens in meer rijen kan passen als de rijen NULL's bevatten. Dus uw InnoDB-buffers kunnen effectiever zijn.

Maar het zou me verbazen als dit in de praktijk een aanzienlijk prestatievoordeel oplevert. Zorgen maken over het effect dat NULL's hebben op de prestaties ligt op het gebied van micro-optimalisatie. U moet uw aandacht ergens anders op richten, op gebieden waar u meer waar voor uw geld krijgt. Bijvoorbeeld het toevoegen van goed gekozen indexen of het vergroten van de toewijzing van databasecache.



  1. PostgreSQL-streamingreplicatie - een diepe duik

  2. Een database maken in SQL Server

  3. MySQL 8 Algemene tabeluitdrukkingen CTE

  4. Tel het aantal opeenvolgende voorkomen van waarden in tabel