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耗时

具体使用时长表格对比:

Tables VARCHAR BIGINT
查询所有 0.001 0.099
idcardno为定值 0.003 1.486
idcardno和id为定值 1.543 1.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
如上实践结果分析:

type condition result explain
VARCHAR 加单引号查询:uid=‘10017000000001’ 5.5ms type=ref,rows=1索引生效
VARCHAR uid=10017000000001 261ms type=All,rows=597558,索引失效
BIGINT uid=10017000000001 2.3ms type=ref,rows=1索引生效

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

posted on 2016-08-31 20:33  huohuoL  阅读(1616)  评论(0编辑  收藏  举报

导航