Mysql Bigint VS Varchar

Что лучше всего подходит для поля индекса и токена на жестком диске/ОЗУ? Biginteger или Varchar (15)? Например, у меня может быть такой номер индекса:

from  10000001 to 45281229703 and higher...

Но что лучше выбрать? Также на неиндексирующем поле, какой тип поля лучше?

Ответ 1

BIGINT всегда равен 8 байтам, VARCHAR(15) равен 1,16 байт в зависимости от длины значения, поэтому BIGINT требуется меньше памяти для больших чисел, но больше памяти для небольших чисел (короче 7 цифр). Кроме того, BIGINT быстрее.

Ответ 2

Мы провели тест в среде моделирования.

  • Создано с 1 параметром BIGINT и 1VARCHAR.
  • Вставлены строки 30Lac.
  • созданный индекс в обоих полях.
  • Результат: BIGINT быстрее реагирует на 20time быстрее, чем VARCHAR.

Здесь 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’;

Ответ 3

varchar добавляет служебные данные:

длина строки должна быть сохранена (дополнительно 2 байта IIRC в MySQL) для каждого поля и в индексе требует больше обработки для сопоставления при сравнении