什么是最好的索引字段和硬盘/RAM上的空间令牌?Biginteger 或 Varchar(15) ?例如,我可以有这样的索引号:
from 10000001 to 45281229703 and higher...
但是选择什么更好呢?同样在非索引字段上,哪种字段类型更好?
BIGINT
始终为 8 字节,VARCHAR(15)
根据值长度为 1..16 字节,因此BIGINT
大数字需要更少的内存,但小数字(小于 7 位)需要更多内存。此外,BIGINT 更快。
我们已经在模拟环境中进行了测试。
这是执行上述步骤的脚本:
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 增加了开销:
每个字段需要存储的字符串长度(MySQL 中额外的 2 个字节 IIRC),并且在索引中需要更多处理以进行比较排序