Czy użycie typu smallint w tabeli mysql zamiast zwykłego int faktycznie poprawia wykorzystanie pamięci? Czy sprzęt nie po prostu przydzieliłby całego 64-bitowego rozmiaru słowa dla wszystkich danych? Jeśli nie przydzieli pełnego słowa, czy nie zauważylibyśmy spadku wydajności spowodowanego analizą wielu drobnych drobnych drobinek lub drobnych drobiazgów z 64-bitowego słowa przydzielonego w pamięci?Czy używanie smallinta w int w mysql faktycznie oszczędza pamięć?
Zasadniczo, czy istnieje jakaś konstrukcja/pamięć/wydajność przy korzystaniu z poniższej tabeli zamiast tej po niej, zakładając, że wiemy, że zakres wartości zapisanych w kolumnie Status
nigdy nie przekroczy zakresu max/min smallint? Dowolny wgląd zostanie doceniony:
create table `TestTableWithSmallInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` smallint(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table `TestTableWithInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` int(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Może to raczej pytanie o sprzęt? Moje rozumienie architektury 64-bitowej polega na tym, że nawet najmniejsza możliwa wartość nadal będzie zajmować 64-bitowy rozmiar słowa. Jeśli tak, czy smallint nadal nie użyje tej samej 64-bitowej porcji pamięci jako int? Tak więc, zadeklarowanie pola jako smallint mogłoby jedynie narzucić maksymalną wartość na polu, bez faktycznego zapisywania jakiejkolwiek pamięci? Dzięki za poradę dotyczącą deklarowania nagich typów przy okazji :) – encrest
Tak nie jest. Być może myślisz o problemach z wyrównaniem, ale 16-bitowe wartości są [wyrównane do 4-bajtowych granic] (http://software.intel.com/en-us/articles/data-alignment-when-migrating-to- 64-bit-intel-architecture) nie 8. Naprawdę nie przejmowałbym się tym, chyba że można zmierzyć ślad pamięciowy MySQL w znaczący sposób i nigdy nie musiałam zajmować się tym poziomem szczegółowości. Komputery mają gigabajty pamięci i istnieją optymalizacje, które umożliwiają mocniejsze pakowanie danych, rzadko jest to problemem. – tadman