Mysql Bigint VS Varchar

Mysql Bigint VS Varchar,mysql,sql,Mysql,Sql,硬盘/RAM上的索引字段和空间令牌的最佳选择是什么?Biginteger还是Varchar(15)? 例如,我可以有这样的索引号: from 10000001 to 45281229703 and higher... 但选择什么更好呢? 在非索引字段上,哪种字段类型更好?BIGINT始终为8字节,VARCHAR(15)为1..16字节,具体取决于值长度,因此BIGINT对大数字需要更少的内存,但对小数字(小于7位)需要更多的内存。此外,BIGINT更快。varchar增加了开销: 每个字段和

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

from  10000001 to 45281229703 and higher...
但选择什么更好呢?
在非索引字段上,哪种字段类型更好?

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

varchar增加了开销:

每个字段和索引中需要存储字符串的长度(MySQL中额外存储2字节IIRC)
需要更多的处理来比较排序规则

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

  • 使用1个BIGINT和1个VARCHAR参数创建了able
  • 插入30Lac行
  • 已在两个字段上创建索引
  • 结果是: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’;
    

    但作为其他表中的外键?例如:_id的id文本,对于id,我也必须作为bigint,对吗?这里的未签名/签名也是很大的区别?哦,对不起,我的错误,从10000001到45281229703在类型上有很大的区别吗?但是作为其他表中的外键?例如:id文本表示_id,对于id,我也必须作为bigint,对吗?那么选择什么呢?)如果我有从1到45281229703以及更高的行,那么这里的salso unsigned/signed有很大的区别吗?还要记住,Varchar需要编码转换,因此不明确,原始数字没有这个问题。哦,对不起,我的错误,从10000001到45281229703,类型之间有这么大的差异吗?更好的问题是哪种类型正确地表示字段。。一旦回答了,就使用它。如果没有测量到的性能问题(设置也可以测量备选方案的性能),那么就没有性能问题-不要像这样“优化”。@pst的问题是bigint和varchar-都表示字段正常,因此,我不需要。一代表一个数字。另一个表示文本(可能是数字的文本表示)。哪个是正确的?