博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql大数据多条件查询索引优化
阅读量:5120 次
发布时间:2019-06-13

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

此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多

优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出所需要的列

 

例子1

优化前:

 

[sql]
  1. select t.* from (  
  2.         select r.* ,row_number() over(order by r.id desc) row from tab(nolock) r   
  3.         where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000       
  4. as t  where row between 1 and 10  
select t.* from (        select r.* ,row_number() over(order by r.id desc) row from tab(nolock) r         where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000 	) as t  where row between 1 and 10

 

优化后:

 

[sql]
  1. select r.* from (  
  2.         select r.ID ,row_number() over(order by r.id desc) row from tab(nolock) r   
  3.         where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000       
  4. as t join tab r on r.id=t.id where row between 1 and 10  
select r.* from (        select r.ID ,row_number() over(order by r.id desc) row from tab(nolock) r         where 1=1 and r.IsDelete=0 and r.Status>0 and r.PlatformID=1 and r.CreateUser=100000 	) as t join tab r on r.id=t.id where row between 1 and 10

最近又有一个例子

例子2

优化前:tablA数据量1千多万,tablB数据量几百万,查询速度11秒多

 

[sql]
  1. select * from (  
  2.         select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime,row_number() over(order by d.id desc) row  
  3.         from tablA(nolock) d   
  4.         join tablB(nolock) p on p.id=d.lessonplanid  
  5.         where p.createID in(109486,103295,103298,109347,130346,181382,330312)  
  6.     ) t where t.row between 1 and 20   
select * from (	    select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime,row_number() over(order by d.id desc) row	    from tablA(nolock) d 		join tablB(nolock) p on p.id=d.lessonplanid	    where p.createID in(109486,103295,103298,109347,130346,181382,330312)	) t where t.row between 1 and 20

 

优化后:查询速度14毫秒

 

[sql]
  1. select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime from (  
  2.         select  d.id,row_number() over(order by d.id desc) row  
  3.         from tablA(nolock) d   
  4.         join tablB(nolock) p on p.id=d.lessonplanid  
  5.         where p.createID in(109486,103295,103298,109347,130346,181382,330312)  
  6. ) t join tablA(nolock) d on d.id=t.id   join tablB(nolock) p on p.id=d.lessonplanid  
  7.  where t.row between 1 and 20   
select d.LessonPlanID,d.ResUrl,p.createID,p.CreateTime from (	    select  d.id,row_number() over(order by d.id desc) row	    from tablA(nolock) d 		join tablB(nolock) p on p.id=d.lessonplanid	    where p.createID in(109486,103295,103298,109347,130346,181382,330312)) t join tablA(nolock) d on d.id=t.id	join tablB(nolock) p on p.id=d.lessonplanid where t.row between 1 and 20

转载于:https://www.cnblogs.com/firstdream/p/8807829.html

你可能感兴趣的文章
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>