`
steveoyung
  • 浏览: 29186 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

开发者应了解的一些SQL优化准则

 
阅读更多

下面介绍一些开发者在数据库操作中要注意的SQL编码准则。虽然本文不能覆盖所有的准则,但还是希望能给开发者带来些许帮助。下面就来看看在编码实践中哪些应该做,哪些不应该做。 

1.  在长时间运行的查询和短查询中使用事务 

如果预期有一个长时间运行的查询,并且有大量的数据输出时,开发者就应该在BEGIN TRAN 和END TRAN之间使用事务。 

这样事务会在缓冲区缓存为独立事务,并会被分配特定内存,以此来提高处理速度。 

2.  不要使用SELECT * 

如果使用SELECT * 来选择表中的所有记录,那么一些不必要的记录也被读取、缓存,增加了磁盘的I/O和内存消耗。 

3.  避免在WHERE子句中使用显式或隐式函数,比如Convert () 

4.  避免在触发器中执行长时间的操作 

5.  适当使用临时表和表变量 

当结果集较小的时候,请尽量使用表变量;当结果集相当大时,使用临时表。 

6.  使用连接(JOIN)代替子查询(Sub-Queries) 

子查询通常作为内联代码来使用,而连接(JOIN)则作为表来使用,这样速度会更快。所以,应尽量避免在连接中使用子查询。 

7.  连接条件中表的顺序 

在连接条件中,应尽量首先使用较小的表,然后逐步使用较大的表。 

8.  循环优化 

如果操作在循环内部没有任何影响,那么应尽量将操作放到循环外面,这样可以减少不必要的重复工作。因为,SQL Server优化器不会自动识别这种低效率的代码,更不会自动优化(其他一些语言的编译器可以)。 

9.  参数探测 

不要在正执行的SP(存储过程)中使用SP参数,这样会导致参数探测(Parameter Sniffing)。应该在声明和设置后再使用SP参数。由于这个原因,SP的行为在每次运行期间都不相同。 

10.  当使用条件语句时,可以使用Index(索引)Hint(提示) 

比如在SQL Server 2008中,可以使用Index hint,也可以使用fixed plan hint强制在查询中使用hint,以提高运行速度。 

11.  在声明中明确指定存储过程中数据类型的大小 

开发者随机声明数据类型的大小是不可取的,如:Varchar (500)。这在执行时会在缓冲区中增加不必要的预留空间。 

12.  在查询中有效利用MAXDOP(最大并行度)设置 

询问数据库管理员关于四核CPU可用性的设置,包括内存的设置,然后适当使用hint,可以有效改善查询速度。 

13.  SQL Server 2008中的GROUPING SETS 

如果数据库服务器为SQL Server 2008,那么可以在所有的Unions中使用Grouping Set来代替Group By。这样在Union中重新进行group by排序时,优化器不会每次都制定一个计划。 

14.  当发生死锁时,总是使用With (nolock) 和With (rowlock) 

15.  使用Update From,而不是简单的Update 

Sql代码 
  1. UPDATE titleauthor  
  2. SET royaltyper = 90  
  3. WHERE au_id = (SELECT au_id FROM authors  
  4. WHERE au_lname = ‘Ringer’ AND au_fname = ‘Albert’)  
  5. AND title_id = (SELECT title_id FROM titles  
  6. WHERE title = ‘Life without Fear’)  
  7. Update from  
  8. UPDATE titleauthor  
  9. SET royaltyper = 90  
  10. FROM authors a, titles t  
  11. WHERE titleauthor.au_id = a.au_id  
  12. AND a.au_lname = ‘Ringer’  
  13. AND a.au_fname = ‘Albert’  
  14. AND titleauthor.title_id = t.title_id  
  15. AND t.title = ‘Life Without Fear’  


16.  使用UNION ALL代替UNION 

UNION和UNION ALL的差别就在于UNION会对数据做一个distanct的动作,而这个distanct动作的速度则取决于现有数据的数量,数量越大时间越长。因此尽量使用UNION ALL来代替UNION。 

17.  避免高成本操作,如NOT LIKE 

英文原文:Coding Guidelines for the Developer During Development

分享到:
评论

相关推荐

    Oracle 11g-SQL-优化

    在深入讨论Oracle 11g中SQL优化的知识点之前,首先需要了解Oracle Database 11g是什么。它是甲骨文公司(Oracle Corporation)推出的一款数据库管理系统,作为Oracle数据库的第11个主要版本,具有许多新的特性和增强...

    sql 语言艺术(一本关于SQL原则与准则的书)

    《SQL语言艺术》这本书深入探讨了SQL这一关系型数据库查询语言的核心原则与准则,旨在帮助读者提升SQL查询的效率和实用性。以下是对书中的关键知识点的详细解析: 1. **SQL基础**:SQL(Structured Query Language...

    sql语句编程开发经典

    - **代码生命周期**:开发者编写的SQL代码通常需要长期运行,因此从一开始就应注重性能和健壮性。 ##### 3.3 开发者与DBA的角色差异 - **开发者的角色**:开发者需要关注代码的性能,并且编写出能够适应未来变化的...

    SQL语言艺术.doc

    他反对将SQL优化视为DBA的专属任务,认为开发者也应该具备这样的能力,因为他们负责的代码将长期影响系统性能。 书中提到,SQL的复杂性和灵活性意味着它支持无数种情况组合,因此高效使用SQL需要知识、技能和直觉。...

    SQL Server2008性能优化研究.pdf

    综上所述,本文从多角度分析了SQL Server 2008数据库性能优化的方法与策略,为数据库管理员和开发者在面对性能瓶颈时提供了一套系统性的解决框架。这些准则和方法均通过实际项目测试验证,具有较强的实用性和参考...

    SQL语言艺术.txt

    本书对此进行了批判,指出性能问题应从开发者层面着手解决。 - **SQL代码的生命周期**:对于开发者来说,他们编写的代码可能会持续运行多年,并且会经历多代硬件和技术的更迭。因此,从一开始就需要编写高效且健壮的...

    《SQL应用重构》

    8. **SQL最佳实践**:总结SQL编程中的一些通用准则和最佳实践,如避免全表扫描,减少嵌套查询,合理使用临时表等。 9. **数据库性能优化**:讨论数据库服务器的配置调整,如内存分配、磁盘I/O优化、并行查询设置等...

    The Art of SQL中文版

    尽管SQL语言存在一些局限性,但它仍然是企业和开发者最常用的工具之一。 #### 二、SQL性能问题的根源与解决方案 当前,大多数开发者都能够编写基本的SQL查询语句,但很少有人能够编写出高性能的SQL代码。这导致了...

    SQL语言艺术,学习SQL的好帮手

    2. **内容结构与覆盖范围**:全书共12章,每章围绕特定主题展开,不仅涵盖了SQL的基本原则和准则,还深入讨论了九种经典的SQL查询场景及其性能影响,通过真实案例提供实践指导。 3. **目标读者群**:本书特别推荐给...

    MySQL数据库开发与SQL编写规范详解

    强调表格的设计,命名惯例,SQL优化技巧,变量绑定的最佳做法及其他高级话题确保了开发者可以提高数据一致性,简化数据库的管理并提高应用程序的工作效率。适用MySQL 5以上的版本。 适用人群:适用于进行MySQL应用...

    SQL Server数据库开发的二十一条军规

    1. **了解你用的工具**:作为SQL Server开发者,必须熟悉T-SQL命令集和SQL Server提供的各种工具。不要忽视学习,即使不常用,也要对所有命令有个大致了解,以便在需要时快速查找和应用。 2. **避免使用游标**:...

Global site tag (gtag.js) - Google Analytics