关于SQL主键用int还是varchar类型的一个小测试
2010-05-09 21:52
1141 查看
整理电脑文档时,看到以前做的关于int,varchar类型做主键的一个小测试,将代码又在sql里走了一遍,发现竟然区别不是那么明显,可能跟我的测试数据量比较小或者电脑配置有关吧。
先建立两张表,表结构一样,只是有一个是以int类型为主键,另一个是以varchar为主键。
然后向这两个表插入50万的数据量,也许是我的电脑配置比较低,插入50万数据用了5分钟。
代码
------不以主键作为查询条件------
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
![](http://images.cnblogs.com/cnblogs_com/wengyuli/WindowsLiveWriter/SQLintvarchar_132E9/image_thumb_2.png)
测试结果:50万的数据量下,int,varchar作为主键时,若以主键为查询条件,消耗时间几乎一样,但若以其他字段作为查询条件,两种主键的查询结果不太稳定,有时候是int快,有时候是varchar快。
总觉得测试的不够准确,数据量和语句上还需要修改,欢迎交流,赐教。
先建立两张表,表结构一样,只是有一个是以int类型为主键,另一个是以varchar为主键。
然后向这两个表插入50万的数据量,也许是我的电脑配置比较低,插入50万数据用了5分钟。
代码
------不以主键作为查询条件------
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
![](http://images.cnblogs.com/cnblogs_com/wengyuli/WindowsLiveWriter/SQLintvarchar_132E9/image_thumb_2.png)
测试结果:50万的数据量下,int,varchar作为主键时,若以主键为查询条件,消耗时间几乎一样,但若以其他字段作为查询条件,两种主键的查询结果不太稳定,有时候是int快,有时候是varchar快。
总觉得测试的不够准确,数据量和语句上还需要修改,欢迎交流,赐教。
相关文章推荐
- 关于SQL主键用int还是varchar类型的一个小测试
- Sql2005下以GUID、INT、VARCHAR类型作主键及无主键时插入表的效率测试
- T-SQL: 关于 Varbinary(Hex,Int) 与 Varchar(HexString) 之间的(数据类型)转换
- 【题目】创建CUSTOMERS表,字段为:ID:(非空,主键)bigint,NAME:(非空)varchar,AGE:int类型;创建ORDERS表,字段为:ID:...
- sql-的int和varchar类型拼接的问题
- sql将varchar类型转换为Int类型排序
- 数据表中有字段time(类型为varchar),如何通过sql语句找出这个字段里力离当前最近的一个日期
- SQL中int类型与varchar类型的隐式转换
- 关于引用类型一个有意思的测试
- Sql 在将varchar值 '1,2,.. ' 转换成数据类型 int 时失败 的问题
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- SQL技术内幕-7 varchar类型的数字和 int 类型的数字的比较+cast的适用
- 一个关于 sql server 文件组测试sql
- 关于数据类型的一个小问题 (int) (int &) (int ) &
- 数据库 把一个建好的基本表的属性类型int转变成varchar类型
- 关于finally是在return前还是后执行的一个测试
- 查询一个int类型的变量(数字)是否在一个字符串里边(逗号分隔的)以及 sqlif 与case
- sql 将 varchar 值转换为数据类型为 int 的列时发生语法错误 的解决办法
- Sql 在将varchar值 '21,123,.. ' 转换成数据类型 int 时失败 的问题
- MySql存储日期类型用int、datetime还是varchar?