`
20386053
  • 浏览: 432277 次
文章分类
社区版块
存档分类
最新评论

sql查询语句优化需要注意的几点

 
阅读更多

 

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

 

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

 

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

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

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

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

 

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

 

http://www.jfong.cn 和 http://www.qi788.com推荐看看。

 

 
连接是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,性能提高了几倍以上,效果非常明显。

 

分享到:
评论

相关推荐

    优化sql语句执行效率几点注意事项

    优化sql语句执行效率几点需要注意的事项

    SQL查询安全性及性能优化

    注意:在检测之前要清理缓存,因为当我们执行SQL语句的时候查出的数据会在数据库中进行缓存,重新查询会返回缓存中的信息。 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 经验:使用子查询嵌套不要过多,尽量使用表...

    Oracle数据库的SQL语句的优化

    相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了?

    LECCO SQL Expert (智能自动SQL优化)

    数据库管理员和开发人员可以从繁重的SQL语句优化工作中解脱出来。 边做边学式训练 LECCO SQL Expert不仅能够找到最佳的SQL语句,而且提供的“边做边学式训练”还能够教会开发人员和数据库管理员如何写出性能最好的...

    lecco sql export pro(SQL优化器)

    击下,LECCO SQL Expert的上下文敏感帮助系统将提供执行计划该处的解释 <br> 优化模块的特点 <br> LECCO SQL Expert优化模块的特点主要有以下几点: <br> 1、自动优化SQL语句; <br> 2、以人工智能...

    基于索引的SQL语句优化之降龙十八掌

    本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用其中一掌来驯服客服业务中横行的‘恶龙’。 这次传授的降龙十八掌,总纲...

    SQL语句优化

    由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则

    SQL21日自学通

    第15 天对SQL 语句优化以提高其性能306 目标306 让你的SQL 语句更易读307 全表扫描308 加入一个新的索引309 在查询中各个元素的布局309 过程311 避免使用OR311 OLAP 与OLTP 的比较313 OLTP 的调试313 OLAP 的调试314...

    PL/SQL Developer

     SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    PL/SQL Developer 6.05注册版-1

    <br>SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL...

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲...索引的失效与优化36讲什么时候需要分表分库37讲电商系统表设计优化案例分析39讲答疑课堂:MySQL中InnoDB的知识点串讲加餐讲推荐几款常用的性能测试工具

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

    Informatica优化(经验总结)

    近来由于工作需要,使用informatica powercenter,对powercenter优化有几点浅微见解: 1、为平衡性能,在数据库可接受范围内尽量在数据库中进行数据排序,即在source qualifier里sql语句中进行排序; 2、抽取数据时...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

    PL/SQL Developer 7.1.5 注册版-3

    <br>SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

    PL/SQL Developer8.04官网程序_keygen_汉化

     该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器提供了同PL/...

Global site tag (gtag.js) - Google Analytics