博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL中表变量的使用,代替IN的操作(效果差不多,有时IN可能会比表变量的好一点点:数据量10000000)
阅读量:2289 次
发布时间:2019-05-09

本文共 3648 字,大约阅读时间需要 12 分钟。

创建模拟数据

CREATE TABLE t_userinfo(userid int identity(1,1) primary key nonclustered, nick varchar(50) not null default '',classid int not null default 0,writetime datetime not null default getdate())go-- 建索引create clustered index ix_userinfo_classid on t_userinfo(classid)go-- 插入数据declare @i intdeclare @k intdeclare @nick varchar(10)set @i = 1while @i<10000000beginset @k = @i % 10set @nick = convert(varchar,@i)insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate())set @i = @i + 1end
set statistics profile on--查看执行过程

表变量--执行时间2-3秒

declare @tempTb table(id int)insert @tempTbselect 1 union allselect 2 union allselect 3 union allselect 4 union allselect 5;--select * from @tempTbselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfo inner join @tempTb on classid=idwhere  writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid asc
union all--执行时间5-6秒

select a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =1 and writetime>'2013-03-05 17:49:33.247' order by userid ascunion allselect top 1000000 userid from t_userinfowhere  classid =2 and writetime>'2013-03-05 17:49:33.247' order by userid ascunion allselect top 1000000 userid from t_userinfowhere  classid =3 and writetime>'2013-03-05 17:49:33.247' order by userid ascunion allselect top 1000000 userid from t_userinfowhere  classid =4 and writetime>'2013-03-05 17:49:33.247' order by userid ascunion allselect top 1000000 userid from t_userinfowhere  classid =5 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid asc
分步查询--执行时间4-5秒

select a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =1 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid ascselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =2 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid ascselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =3 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid ascselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =4 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid ascselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid =5 and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid asc
分步查询--执行时间2-3秒

set statistics profile onselect a.userid,b.nick,b.classid,b.writetime from(select top 20 a.userid from(select top 1000000 userid from t_userinfowhere  classid in(1,2,3,4,5) and writetime>'2013-03-05 17:49:33.247' order by userid asc) a order by a.userid desc)a inner join t_userinfo b on a.userid = b.useridorder by a.userid asc

转载地址:http://reunb.baihongyu.com/

你可能感兴趣的文章
MySQL忘记密码重置管理员密码
查看>>
MySQL创建及授权账号
查看>>
MySQL库的基本操作
查看>>
MySQL表的基本操作
查看>>
MySQL数据类型
查看>>
MySQL SQL语句最常见的分类
查看>>
MySQL用户权限
查看>>
MySQL数据备份
查看>>
MySQL使用explain检查索引执行计划
查看>>
MySQL字符集
查看>>
MySQL存储引擎
查看>>
MySQL主从同步
查看>>
MySQL半同步复制
查看>>
MySQL主库宕机从库提权
查看>>
MySQL主主模式
查看>>
MySQL错误代码
查看>>
MySQL binlog的三种模式
查看>>
MySQL利用binlog增量恢复数据库
查看>>
Tomcat多实例多应用
查看>>
Tomcat启动慢解决方法
查看>>