如何优化应用程序的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就会越慢。
不过某个任务可以使用更高效的技术实现,就不要使用触发器。
尽量不要使用回滚触发器,因为其相关开销太大。与其让触发器发现问题后对事务处理进行回滚操作,不如在它进入触发器之前就捕获该错误。与让触发器回滚相比,在触发器启动之前提前发现错误会消耗更少的服务器资源。
【编辑推荐】