关于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 ( 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快。

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

 






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


相关文章
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
451 11
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
324 1
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
534 10
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
180 3
|
自然语言处理 Go 数据安全/隐私保护
对 int 类型的数据加密,有哪些好的方案?
对 int 类型的数据加密,有哪些好的方案?
266 13
|
SQL 存储 数据采集
sql中varchar转number时报错怎么解决
通过上述策略的综合运用,面对VARCHAR到NUMBER的转换挑战,不仅能够游刃有余地解决现有的问题,更能前瞻性地预防未来的隐患。在数字化转型的浪潮中,凭借其高性能、安全稳定的云产品与服务,为各类企业级应用保驾护航,助您轻松驾驭数据的海洋,实现业务的无缝扩展与全球布局。
652 0
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
449 1
下一篇
开通oss服务