设为首页 加入收藏

TOP

SQL语句执行效率瓶颈(二)
2014-11-24 02:49:33 来源: 作者: 【 】 浏览:3
Tags:SQL 语句 执行 效率 瓶颈
,可以考虑用临时表和表变量分步汇总这多个表的数据。
4、他情况下,应该控制临时表和表变量的使用。
5、表和表变量的选择,很多说法是表变量在内存,速度快,应该首选表变量,但是在实际使用中发现,这个选择主要考虑需要放在临时表的数据量,在数据量较多的情况下,临时表的速度反而更快。
6、关于临时表产生使用SELECTINTO和CREATETABLE+INSERTINTO的选择,我们做过测试,一般情况下,SELECTINTO会比CREATETABLE+INSERTINTO的方法快很多,但是SELECTINTO会锁定TEMPDB的 系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程,所以我的建议是,在并发系统中,尽量使用CREATETABLE+INSERTINTO,而大数据量的单个语句使用中,使用SELECTINTO。 www.2cto.com
1.7 存储过程中是否使用了SET NOCOUNT ON
每次存储过程执行时,一个消息会从服务端发给客户端以显示存储过程影响的行数。这些信息对客户端来说很少有用。通过关闭这个缺省值,你能减少在服务端和客户端的网络流量,帮助全面提升服务器和应用程序的性能。在每个存储过程的开头包含SETNOCOUNTON语句
1.8 要所有的存储过程的拥有者是DBO吗?引用的形式是databa seowner.objectname吗?
为了最好的性能,同一个存储过程里调用的所有对象的拥有者都应该相同,DBO更适宜。在我们的系统中所有对象的拥有者都是DBO,如果不是那样,即对象名相同而拥有者不同,那么SQLServer必须执行名称判断。当发生这样的情形时,SQLServer不能使用存储过程里在内存里的执行计划,相反,它必须重新编译存储过程,从而影响性能。
当从应用程序里调用存储过程时,使用分隔符名称来调用也是重要的。如:
EXEC dbo.myProcedure
代替:EXEC myProcedure
1.9 事务的影响范围应该尽可能小
在使用事务时,原则上应该使事务尽可能得短并且要避免事务嵌套。事务应该尽可能得短,这是因为比较长的事务增加了事务占用数据的时间,使其它必须等待访问该事务锁定数据的事务,延长了等待访问数据的时间。在使用事务时,为了使事务尽可能得短,应该采取一些相应的方法,例如,不应该把SELECT放在事务中,因为所有的SELECT都要求使用WITH(NOLOCK),这个放在事务中没有任何意义。一些没有涉及到实体表的操作都放在事物外面。 www.2cto.com
提高事务中每个语句的效率,利用索引和其他方法提高每个语句的效率可以有效地减少整个事务的执行时间。
尽量不要指定锁类型和索引,SQL SERVER允许我们自己指定语句使用的锁类型和索引,但是一般情况下,SQLSERVER优化器选择的锁类型和索引是在当前数据量和查询条件下是最优的,我们指定的可能只是在目前情况下更优,但是数据量和数据分布在将来是会变化的。
作者 Beirut
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇新手引用NoSQL数据建模 下一篇堆表的在执行Select语句时的默认..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 基本运算符 - (2025-12-24 09:52:56)
·Shell 函数 | 菜鸟教 (2025-12-24 09:52:54)
·Linux 常用命令集合 (2025-12-24 09:52:51)
·socket 编程如何实现 (2025-12-24 09:20:41)
·Python创建简易的Soc (2025-12-24 09:20:39)