varchar && bigint 执行效率及区别

在数据库表设计的过程中,总会遇到某个字段到底使用何种类型的困惑?比如身份证(举例不当,因为身份证会出现字母的情况)11位,我如果使用int类型的话,肯定不行,个数都超额了;所以一般采用的办法就是使用varchar,自定义使用长度,很好的办法。不过最近发了bigInt的使用,下边通过测试来对比一下两者的性能使用情况:(最新测试往下拉)

第一次测试:

第一种情况:idcardno为varchar类型的时候
varchar类型
查询整体使用的耗时:
如图:执行时间0.001sec
查询整体耗时
查询idcardno为1304300,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300”
具体idcardno耗时
查询idcardno为1304300和id为31,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300” AND id=“31”
具体idcardno和id耗时

第二种情况:idcardno为bigint类型的时候
varchar类型
查询整体使用的耗时:
查询整体耗时
查询idcardno为1304300,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300”
具体idcardno耗时
查询idcardno为1304300和id为31,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300” AND id=“31”
具体idcardno和id耗时

具体使用时长表格对比:

TablesVARCHARBIGINT
查询所有0.0010.099
idcardno为定值0.0031.486
idcardno和id为定值1.5431.486

2018年09月12日重新测试:

条件一:
测试工具:macbook pro 8G
测试环境:30万条数据 为字段UID加了唯一索引

当设置uid为VARCHAR类型,执行一条查询数据:
执行SQL:select * from employees where uid=10017000000001;
执行结果:
varchar
当设置uid为BIGINT类型,执行一条查询语句:
执行SQL:select * from employees where uid=10017000000001;
执行结果:
bigint

条件二:
测试工具:macbook pro 8G
测试环境:60万条数据 为字段UID加了唯一索引
VARCHAR类型下,执行语句
查询条件无引号:select * from employees where uid=10017000000001;
执行结果:
varchar,无双引号
explain执行计划结果:
explain-varchar2
查询条件加单引号:select * from employees where uid=‘10017000000001’;
执行结果:
varchar,加单引号
explain执行计划结果:
explain-varchar1
BIGINT类型下,执行语句
查询语句:select * from employees where uid=‘10017000000001’;
执行时间
explain执行计划结果:
explain
如上实践结果分析:

typeconditionresultexplain
VARCHAR加单引号查询:uid=‘10017000000001’5.5mstype=ref,rows=1索引生效
VARCHARuid=10017000000001261mstype=All,rows=597558,索引失效
BIGINTuid=100170000000012.3mstype=ref,rows=1索引生效

根据结果我们可以清晰的看到,若使用VARCHAR作为查询类型,我们必须加上引号执行,索引才会生效;
所以对于索引,一定要注意:
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。
具体见文章mysql索引应用

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值