Mysql
 sql >> Baza danych >  >> RDS >> Mysql

NULL w MySQL (wydajność i pamięć masowa)

Zależy to od używanego silnika pamięci masowej.

W formacie MyISAM każdy nagłówek wiersza zawiera pole bitowe z jednym bitem dla każdej kolumny do kodowania stanu NULL. Kolumna o wartości NULL nadal zajmuje miejsce, więc wartości NULL nie zmniejszają ilości miejsca na dane. Zobacz https://dev.mysql.com/doc/internals/ pl/myisam-wprowadzenie.html

W InnoDB każda kolumna ma „przesunięcie początku pola” w nagłówku wiersza, czyli jeden lub dwa bajty na kolumnę. Wysoki bit w tym przesunięciu początku pola jest włączony, jeśli kolumna ma wartość NULL. W takim przypadku kolumna nie musi być w ogóle przechowywana. Więc jeśli masz dużo NULL, twoja pamięć powinna zostać znacznie zmniejszona. Zobacz https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

EDYTUJ:

Bity NULL są częścią nagłówków wierszy, nie możesz ich dodawać.

Jedynym sposobem, w jaki mogę sobie wyobrazić, że wartości NULL poprawiają wydajność, jest to, że w InnoDB strona danych może zmieścić więcej wierszy, jeśli wiersze zawierają wartości NULL. Więc twoje bufory InnoDB mogą być bardziej efektywne.

Ale byłbym bardzo zaskoczony, gdyby w praktyce zapewniło to znaczną przewagę wydajności. Martwienie się o wpływ NULL na wydajność leży w sferze mikrooptymalizacji. Powinieneś skupić swoją uwagę gdzie indziej, w obszarach, które dają większy zwrot z każdej zainwestowanej złotówki. Na przykład dodanie dobrze dobranych indeksów lub zwiększenie alokacji pamięci podręcznej bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Składnia SQL CREATE TABLE – wymieniona przez DBMS

  2. Niezsynchronizowane polecenia; nie możesz teraz uruchomić tego polecenia

  3. Co jest bardziej wydajne:wiele tabel MySQL czy jedna duża tabela?

  4. Sterownik MySQL JDBC 5.1.33 — problem ze strefą czasową

  5. MySQL Group_Concat() a T-SQL String_Agg()