Mysql Bigint VS Varchar

时间:2013-03-06 07:46:55

标签: mysql sql

索引字段和硬盘/ RAM上的空间令牌最佳? Biginteger或Varchar(15)? 我可以有这样的索引号:

from  10000001 to 45281229703 and higher...

但最好选择什么? 同样在非索引字段中哪种字段类型更好?

3 个答案:

答案 0 :(得分:31)

BIGINT总是8个字节,VARCHAR(15)是1..16个字节,具体取决于值的长度,因此BIGINT在大数字上需要更少的内存,但在小数字上需要更多内存(更短)超过7位数)。此外,BIGINT更快。

答案 1 :(得分:11)

我们已在模拟环境中运行测试。

  1. 使用1 BIGINT和1VARCHAR参数创建。
  2. 插入30Lac行。
  3. 在两个字段上创建了索引。
  4. 结果是: BIGINT 比VARCHAR更快地响应 20time
  5. 以下是执行上述步骤的脚本:

    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) 在比较时需要更多的整理处理