sql >> Databáze >  >> RDS >> Mysql

NULL v MySQL (výkon a úložiště)

Záleží na tom, jaký modul úložiště používáte.

Ve formátu MyISAM obsahuje každé záhlaví řádku bitové pole s jedním bitem pro každý sloupec pro kódování stavu NULL. Sloupec, který má hodnotu NULL, stále zabírá místo, takže hodnoty NULL nesnižují úložiště. Viz https://dev.mysql.com/doc/internals/ cs/myisam-introduction.html

V InnoDB má každý sloupec „odsazení začátku pole“ v záhlaví řádku, což je jeden nebo dva bajty na sloupec. Vysoký bit v počátečním offsetu tohoto pole je zapnutý, pokud má sloupec hodnotu NULL. V takovém případě není nutné sloupec ukládat vůbec. Takže pokud máte hodně NULL, vaše úložiště by se mělo výrazně snížit. Viz https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

UPRAVIT:

Bity NULL jsou součástí záhlaví řádků, nemůžete je přidat.

Jediný způsob, jak si dokážu představit, že hodnoty NULL zlepšují výkon, je to, že v InnoDB se na stránku dat může vejít více řádků, pokud řádky obsahují hodnoty NULL. Takže vaše vyrovnávací paměti InnoDB mohou být efektivnější.

Byl bych ale velmi překvapen, kdyby to v praxi poskytovalo výraznou výkonnostní výhodu. Obavy o vliv NULL na výkon patří do oblasti mikrooptimalizace. Měli byste zaměřit svou pozornost jinam, do oblastí, které dávají větší ránu za peníze. Například přidání dobře zvolených indexů nebo zvýšení alokace mezipaměti databáze.



  1. Připojte se ke vzdálenému serveru MySQL pomocí SSL z PHP

  2. SQL Server kontingenční tabulka s více sloupcovými agregacemi

  3. MySQL:Neplatné použití skupinové funkce

  4. Existuje Entity Framework 7 Database-First POCO Generator?