17

什么是最好的索引字段和硬盘/RAM上的空间令牌?Biginteger 或 Varchar(15) ?例如,我可以有这样的索引号:

from  10000001 to 45281229703 and higher...

但是选择什么更好呢?同样在非索引字段上,哪种字段类型更好?

4

3 回答 3

39

BIGINT始终为 8 字节,VARCHAR(15)根据值长度为 1..16 字节,因此BIGINT大数字需要更少的内存,但小数字(小于 7 位)需要更多内存。此外,BIGINT 更快。

于 2013-03-06T07:48:08.617 回答
14

我们已经在模拟环境中进行了测试。

  1. 使用 1 BIGINT 和 1VARCHAR 参数创建。
  2. 插入 30Lac 行。
  3. 在两个字段上创建索引。
  4. 结果是:BIGINT的响应速度几乎比 VARCHAR 快 20倍。

这是执行上述步骤的脚本:

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’;
于 2016-08-24T07:29:40.903 回答
4

varchar 增加了开销:

每个字段需要存储的字符串长度(MySQL 中额外的 2 个字节 IIRC),并且在索引中需要更多处理以进行比较排序

于 2013-03-06T07:49:27.137 回答