您的位置:首页 > 数据库

sqlserver 学习日志----sqlserver 优化学习日志:

2009-01-08 12:49 232 查看
1.08 sqlserver 优化学习日志:

1) 存储过程的编译及写作:

当一个存储过程第一次被执行时,它会被优化,一个查询计划被编译并缓存在SQL Server内存中。如果相同的存储过程被再次调用,它将不会在创建一个新查询计划,而是使用缓存的计划,这会节省时间、提高性能。这可能并非一直都是你所希望的。如果存储过程中的该查询每次都完全相同,那么这是一件好事。但是如果查询是动态的(例如WHERE子句可能会有所不同),那么这将非常糟糕,因为查询运行时不会再给优化,该查询的性能可能会受影响。如果你知道存储过程中的查询每次运行时会有所不同,那么在你创建存储过程时,你可以考虑增加WITH RECOMPILE选项。这将会强制存储过程每次运行时需要重新编译。

记住在你的存储过程中增加“SET NOCOUNT ON”这个声明。如果你没有打开这个功能,那么每次一个SQL语句被执行是,SQL Server将会发送一个响应给客户端,显示该语句所影响的行数。实际上客户端一般不需要这个信息。使用这个声明可以有助于减少服务器和客户端之间的通信

为避免在你的SQL Server应用程序中发生死锁现象,按照以下建议来设计你的应用程序:1、应用程序每次按照相同的顺序来访问服务器对象;2、在事务处理过程中,不允许任何用户输入。在事务处理开始前对其进行收集;3、保持事务处理简短且在一个单一批处理中。

2) 索引设计:

索引过多所带来的问题是,每次一条记录被插入、删除或更新操作时,SQL Server必须对索引进行维护。维护1、2个索引或许不会给SQL Server带来太大开销,但是如果你的索引在5个以上,这可能会给数据表带来较大的性能负担。理想情况下,索引应该越少越好。为了获得最优化性能,选择合适的索引数需要你掌握好一个平衡的度。

大概来说,只有你确信真正需要添加索引的时候,才对表添加索引。你必须非常了解对数据所进行的查询类型,然后根据这些信息选择合适的索引,索引创建后,必须通过测试来查看它是否真正可以提高性能。

对于OLTP应用来说,选择最佳索引通常比较困难,因为这类应用通常要进行大量的插入、更新和删除行为。尽管你需要好的索引来迅速定为那些需要进行插入、更新或删除操作的记录,但是如果索引太多,会使得每一次操作带来太大的开销。另一方面,如果你有一个仅对数据库进行只读操作的OLAP应用,那么你可以根据自己的需要来尽可能多的添加索引。由此可见,你的应用程序使用方式不同,会给你的索引建立策略带来很大差别。

还有两种情况,索引不会给你的SQL Server带来性能上的提高,一是数据表非常小、记录非常少的情况下;二是被索引的列有超过95%以上的数值不是唯一的。这两种情况下SQL Server查询优化器不会使用你选择的索引,因此它们对SQL Server是一个负担,需要删除之。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: