关于SQL主键用int还是varchar类型的一个小测试-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

关于SQL主键用int还是varchar类型的一个小测试

简介:

整理电脑文档时,看到以前做的关于int,varchar类型做主键的一个小测试,将代码又在sql里走了一遍,发现竟然区别不是那么明显,可能跟我的测试数据量比较小或者电脑配置有关吧。

先建立两张表,表结构一样,只是有一个是以int类型为主键,另一个是以varchar为主键。

然后向这两个表插入50万的数据量,也许是我的电脑配置比较低,插入50万数据用了5分钟。

代码
----------建立测试数据库及测试表---------------- 
--
drop database test 
create database Test 

use Test 
create table intT( 
id 
int not null
name 
varchar(50), 
gid 
varchar(50

alter table intT add primary key(id) 

create table varT( 
id 
varchar(50not null
name 
varchar(50), 
gid 
varchar(50

alter table varT add primary key(id) 
----------分别对两个表插入W条数据------ 
declare @start datetime,@end datetime 
select @start=getdate() 
declare @i int 
select @i=0 
while @i<500000 
begin 
insert into intT(id,name,gid)values(@i,@i,@i
select @i=@i+1 
end 
select @end=getdate() 
select @end-@start 

declare @i int 
select @i=0 
while @i<500000 
begin 
insert into varT(id,name,gid)values(@i,@i,@i
select @i=@i+1 
end 

 插入数据后便可以进行不同查询条件的测试了。 

代码
----------测试查询------------------------------ 
--
---以主键作为查询条件----- 
declare @d1 datetime,@d2 datetime 
select @d1=getdate() 
select * from intT where id=499900 
select @d2=getdate() 
select @d2-@d1 

declare @d3 datetime,@d4 datetime 
select @d3=getdate() 
select * from varT where id='499900' 
select @d4=getdate() 
select @d4-@d3

代码

------不以主键作为查询条件------ 
declare @d1 datetime,@d2 datetime 
select @d1=getdate() 
select * from intT where id=499900 
select @d2=getdate() 
select @d2-@d1 

declare @d3 datetime,@d4 datetime 
select @d3=getdate() 
select * from varT where id='499900' 
select @d4=getdate() 
select @d4-@d3

测试结果:50万的数据量下,int,varchar作为主键时,若以主键为查询条件,消耗时间几乎一样,但若以其他字段作为查询条件,两种主键的查询结果不太稳定,有时候是int快,有时候是varchar快。

总觉得测试的不够准确,数据量和语句上还需要修改,欢迎交流,赐教。

 






     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/588046,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: