免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2081 | 回复: 0
打印 上一主题 下一主题

关于SQL主键用int还是varchar类型的一个小测试 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-29 01:26 |只看该作者 |倒序浏览
整理电脑文档时,看到以前做的关于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(50) not
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快。
总觉得测试的不够准确,数据量和语句上还需要修改,欢迎交流,赐教。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP