SQL Server应用程序性能调优之SQL编程

运维 服务器运维
现在,应用程序和数据库设计应该已经完成,而且都使用快速原型技术进行了性能和可扩展性的测试。现在我们需要为应用程序编写与SQL Server协同的代码。

如何优化应用程序的SQL Server编程

  现在,应用程序和数据库设计应该已经完成,而且都使用快速原型技术进行了性能和可扩展性的测试。现在我们需要为应用程序编写与SQL Server协同的代码。

如何进行应用程序编程,对性能和可扩展性也有很大影响,就如同数据库设计和整体应用程序设计对性能的影响一样。有的时候,选择一个更适合的简单编程技巧就可以带来较大的性能提高。实现一个任务的代码可能有很多种,不过获得最优性能的往往只有一个。

  如何优化你的T-SQL代码

  和任何编程语言一样,T-SQL提供了多种方式来实现同一个任务。其中有的方法所实现的性能要高于其它方法。在这一部分中,我将向大家介绍一些编写高性能T-SQL代码的诀窍。

  选择合适的数据类型:数据类型选择好,可以大大提高SQL Server执行SELECT、INSERT、UPDATE和DELETE操作的速度。不过,选择最优的数据类型并不总是一件很简单的事情。在创建SQL Server物理表的时候,以下建议可以有助于获得最优性能。

  选择能满足你需要的最小数据类型。例如,如果某一列需要存储的是数字1到10,那么该列的数据类型选择TINYINT会比INT更好。CHAR和VARCHAR的选择也是遵循同样的原则。另外,对于字符列的字符数不要设定太大,满足自己需要就可以,这样SQL Server能够在其数据和索引页面中存储更多行记录,降低读取它们时所需的I/O次数。另外,它将减少从服务器移动到客户端的数据量,降低网络流量和延时。

  如果某一列的文本数据在长度上差别很大,使用VARCHAR数据类型来取代CHAR数据类型。尽管VARCHAR数据类型比CHAR数据类型的开销略微有些大,但是使用VARCHAR数据类型可以大大节省空间,可以降低I/O,提高整体SQL Server性能。

  除非你需要存储Unicode数据,不要使用NVARCHAR或NCHAR数据类型。它们所占用的空间是VARCHAR或CHAR的两倍,可以增加服务器I/O开销。

  如果你需要存储较大的字符串数据,而且它们不超过8000字符,那么最好使用VARCHAR数据类型,而不要使用TEXT数据类型。TEXT数据类型开销较大,会降低性能。

  如果有一列只用来存储数字,使用数值型数据类型,诸如INTERGER,而不要使用VARCHAR或CHAR数据类型。Numeric数据类型一般会需要较小的空间来存储数值。这样有助于降低数据列的大小,而且当列内容被搜索或与其它列联合时,可以提高性能。

  谨慎使用触发器

  在T-SQL中,触发器是一个强大的工具,但是由于它们每次被执行的时候,需要对表进行INSERT、UPDATE或DELETE操作,这可能带来大量开销。以下是如何优化触发器性能的一些技巧。

  保持触发器中的代码最精简以降低开销。触发器中运行的代码越多,它所进行的每一个INSERT、UPDATE和DELETE就会越慢。

  不过某个任务可以使用更高效的技术实现,就不要使用触发器。

  尽量不要使用回滚触发器,因为其相关开销太大。与其让触发器发现问题后对事务处理进行回滚操作,不如在它进入触发器之前就捕获该错误。与让触发器回滚相比,在触发器启动之前提前发现错误会消耗更少的服务器资源。

【编辑推荐】

  1. EMC推出混合环境下服务器管理软件
  2. EMC推出混合环境下服务器管理软件
  3. SaaS、云计算、传统软件——一场危险的三角游戏
责任编辑:符甲 来源: IT168
相关推荐

2009-01-08 19:06:13

服务器应用程序SQL Server

2009-01-08 19:11:39

服务器应用程序SQL Server

2010-07-28 09:25:41

jQueryJavaScript性

2011-09-02 14:05:25

SQL Server性能调优

2020-12-03 08:00:00

SQL数据库MySQL

2010-07-19 13:35:51

SQL Server性

2010-08-18 09:42:11

DB2性能调优

2011-01-21 08:38:20

2023-03-03 08:14:33

JavaJDK调优

2009-04-02 10:26:27

2021-11-07 23:49:19

SQL数据库工具

2010-02-04 09:41:03

Android应用程序

2009-07-29 11:33:14

ASP.NET技巧ASP.NET应用程序

2009-07-01 18:24:59

JSP应用程序JMeter

2019-10-17 10:10:23

优化Web前端

2010-07-21 09:28:34

SQL Server

2011-08-08 13:35:50

Web应用WANWeb应用程序

2010-11-15 16:20:33

Oracle系统优化

2014-12-16 09:35:13

DevOps

2011-09-20 10:41:45

Web
点赞
收藏

51CTO技术栈公众号