索引字段和硬盘/ RAM上的空间令牌最佳? Biginteger或Varchar(15)? 我可以有这样的索引号:
from 10000001 to 45281229703 and higher...
但最好选择什么? 同样在非索引字段中哪种字段类型更好?
答案 0 :(得分:31)
BIGINT
总是8个字节,VARCHAR(15)
是1..16个字节,具体取决于值的长度,因此BIGINT
在大数字上需要更少的内存,但在小数字上需要更多内存(更短)超过7位数)。此外,BIGINT更快。
答案 1 :(得分:11)
我们已在模拟环境中运行测试。
以下是执行上述步骤的脚本:
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’;
答案 2 :(得分:3)
varchar增加了开销:
每个字段和索引中需要存储字符串的长度(MySQL中额外的2个字节IIRC) 在比较时需要更多的整理处理