Ответ 1
BIGINT
всегда равен 8 байтам, VARCHAR(15)
равен 1,16 байт в зависимости от длины значения, поэтому BIGINT
требуется меньше памяти для больших чисел, но больше памяти для небольших чисел (короче 7 цифр). Кроме того, BIGINT быстрее.
Что лучше всего подходит для поля индекса и токена на жестком диске/ОЗУ? Biginteger или Varchar (15)? Например, у меня может быть такой номер индекса:
from 10000001 to 45281229703 and higher...
Но что лучше выбрать? Также на неиндексирующем поле, какой тип поля лучше?
BIGINT
всегда равен 8 байтам, VARCHAR(15)
равен 1,16 байт в зависимости от длины значения, поэтому BIGINT
требуется меньше памяти для больших чисел, но больше памяти для небольших чисел (короче 7 цифр). Кроме того, BIGINT быстрее.
Мы провели тест в среде моделирования.
Здесь script выполняет следующие шаги:
Create table r5(mob bigint,m_mob varchar(30));
Create index i_d on r5(mob,m_mob);
do $$
begin
for i in 1..3000000 loop
insert into r5(mob,m_mob) values(i,i||’abc’);
end loop;
end; $$
select * from r5
where mob=2900000;
select * from r5
where m_mob=’2900000abc’;
varchar добавляет служебные данные:
длина строки должна быть сохранена (дополнительно 2 байта IIRC в MySQL) для каждого поля и в индексе требует больше обработки для сопоставления при сравнении