博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql查询语句优化需要注意的几点
阅读量:5299 次
发布时间:2019-06-14

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

 

为了获得稳定的执行性能,SQL语句越简单越好。对复杂的SQL语句,要设法对之进行简化。

 

常见的简化规则如下:
 
1)不要有超过5个以上的表连接(JOIN)
2)考虑使用临时表或表变量存放中间结果。
3)少用子查询
4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
5)限制结果集
6)合理的表设计          这个非常重要
7)建立合适的索引       这个非常重要
 

 

连接的表越多,其编译的时间和连接的开销也越大,性能越不好控制。

最好是把连接拆开成较小的几个部分逐个顺序执行。

优先执行那些能够大量减少结果的连接。

拆分的好处不仅仅是减少SQL Server优化的时间,更使得SQL语句能够以你可以预测的方式和顺序执行。

 

如果一定需要连接很多表才能得到数据,那么很可能意味着设计上的缺陷。

 

 

 

连接是outer join,非常不好。因为outer join意味着必须对左表或右表查询所有行。

 

如果表很大而没有相应的where语句,那么outer join很容易导致table scan或index scan。

要尽量使用inner join避免scan整个表。

 

优化建议:
 
1)使用临时表存放t1表的结果,能大大减少logical reads(或返回行数)的操作要优先执行。

 

 

 仔细分析语句,你会发现where中的条件全是针对表t1的,所以直接使用上面的where子句查询表t1,然后把结果存放再临时表#t1中:
 
Select t1….. into #tt1 from t1 where…(和上面的where一样)
 
2)再把#tt1和其他表进行连接:
 
Select #t1…
Left outer join …
Left outer join…
 
 
3)修改 like 程序,去掉前置百分号。like语句却因为前置百分号而无法使用索引
4)从系统设计的角度修改语句,去掉outer join。
5)考虑组合索引或覆盖索引消除clustered index scan。
 
上面1和2点建议立即消除了worktable,性能提高了几倍以上,效果非常明显。

 

 

转载于:https://www.cnblogs.com/jiangu66/p/3181610.html

你可能感兴趣的文章
zencart iis 伪静态设置 测试可用
查看>>
环套树
查看>>
中英文混合字符串长度
查看>>
[转]Repeat Page Header on each Page for reports SSRS
查看>>
Spring中事务传播行为
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2734: 国家排序
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
Notepad++ 16进制编辑功能
查看>>
Caffe: Cannot create Cublas handle. Cublas won't be available
查看>>
Linux 下 LXD 容器搭建 Hadoop 集群
查看>>
mysql describe
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C语言作业3
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
koogra--Excel文件读取利器
查看>>
ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>