varchar && bigint 执行效率及区别

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

第一次测试:

第一种情况:idcardno为varchar类型的时候
varchar && bigint 执行效率及区别_第1张图片
查询整体使用的耗时:
如图:执行时间0.001sec
varchar && bigint 执行效率及区别_第2张图片
查询idcardno为1304300,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300”
varchar && bigint 执行效率及区别_第3张图片
查询idcardno为1304300和id为31,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300” AND id=“31”
varchar && bigint 执行效率及区别_第4张图片

第二种情况:idcardno为bigint类型的时候
varchar && bigint 执行效率及区别_第5张图片
查询整体使用的耗时:
varchar && bigint 执行效率及区别_第6张图片
查询idcardno为1304300,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300”
varchar && bigint 执行效率及区别_第7张图片
查询idcardno为1304300和id为31,sql语句-SELECT * FROM id_logs WHERE idcardno=“1304300” AND id=“31”
varchar && bigint 执行效率及区别_第8张图片

具体使用时长表格对比:

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 && bigint 执行效率及区别_第9张图片
当设置uid为BIGINT类型,执行一条查询语句:
执行SQL:select * from employees where uid=10017000000001;
执行结果:
varchar && bigint 执行效率及区别_第10张图片

条件二:
测试工具:macbook pro 8G
测试环境:60万条数据 为字段UID加了唯一索引
VARCHAR类型下,执行语句
查询条件无引号:select * from employees where uid=10017000000001;
执行结果:
varchar && bigint 执行效率及区别_第11张图片
explain执行计划结果:
explain-varchar2
查询条件加单引号:select * from employees where uid=‘10017000000001’;
执行结果:
varchar && bigint 执行效率及区别_第12张图片
explain执行计划结果:
varchar && bigint 执行效率及区别_第13张图片
BIGINT类型下,执行语句
查询语句:select * from employees where uid=‘10017000000001’;
varchar && bigint 执行效率及区别_第14张图片
explain执行计划结果:
varchar && bigint 执行效率及区别_第15张图片
如上实践结果分析:

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索引应用

你可能感兴趣的:(------【JAVA】,●数据库设计及系统操作)