sql server 中 bigint 和 datetime 性能比较

时间:2022-04-19 20:09:07
-- 创建表
create table Test_tbl
(
    ID varchar(40) primary key nonclustered,
    IntCol int,
	DateCol datetime
) 

--==================================================================================
-- 【100w数据测试】
--==================================================================================
-- 创建100w测试数据
declare @j int
declare @data float
declare @style bigint
set @j = 1
while @j<1000000
    begin
       set @style = cast(replace(replace(replace(convert(varchar(30),GETDATE(),120),'-',''),':',''), ' ', '') as bigint)
       insert into Test_tbl(ID, IntCol, DateCol) values(NEWID(),@style, getdate())
    set @j = @j + 1
end 

declare @d datetime
set @d = getdate()
declare   @i   int

print '【100w数据 查询100次测试】'
-- 测试性能1,datetime
-------------------------------------------------------------------------------------
set nocount on -- 不显示受影响行数
set   @i=0
while   @i <20
begin
    select top 1 * from Test_tbl where DateCol>getdate()
    set   @i   =   @i+1
end
-------------------------------------------------------------------------------------
select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())
set nocount off 
print '100w数据 date 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))


-- 测试性能2,int
-------------------------------------------------------------------------------------
set nocount on -- 不显示受影响行数
set   @i=0
while   @i <20
begin
    select top 1 * from Test_tbl where IntCol>20151212030303
    set   @i   =   @i+1
end
-------------------------------------------------------------------------------------
select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())
set nocount off 
print '100w数据 int 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))


--==================================================================================
-- 【1000w数据测试】
--==================================================================================
-- 创建900w测试数据,累计1000w
set @j = 1
while @j<9000000
    begin
       set @style = cast(replace(replace(replace(convert(varchar(30),GETDATE(),120),'-',''),':',''), ' ', '') as bigint)
       insert into Test_tbl(ID, IntCol, DateCol) values(NEWID(),@style,getdate())
    set @j = @j + 1
end 

print '【1000w数据 查询100次测试】'
-- 测试性能1,datetime
-------------------------------------------------------------------------------------
set nocount on -- 不显示受影响行数
set   @i=0
while   @i <100
begin
    select top 1 * from Test_tbl where DateCol>getdate()
    set   @i   =   @i+1
end
-------------------------------------------------------------------------------------
select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())
set nocount off 
print '1000w数据 date 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))

-- 测试性能2,int
-------------------------------------------------------------------------------------
set nocount on -- 不显示受影响行数
set   @i=0
while   @i <100
begin
    select top 1 * from Test_tbl where IntCol>20151212030303
    set   @i   =   @i+1
end
-------------------------------------------------------------------------------------
select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())
set nocount off 
print '1000w数据 int 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))