博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL语句优化
阅读量:5153 次
发布时间:2019-06-13

本文共 1077 字,大约阅读时间需要 3 分钟。

1、在查询中不要使用“select *”  检索不必要的列会带来额外的系统开销,有句话叫做“该省的则省”;

2、在select清单中避免不必要的列,在连接条件中避免不必要的表;

3、不要在子查询中使用count()求和执行存在性检查

4、避免使用两个不同类型的列进行表的连接

5、避免死锁

6、避免使用count(*)获得表的记录数

(1)为了获得表中的记录数,我们通常使用下面的SQL 语句: SELECT COUNT(*) FROM dbo.orders 这条语句会执行全表扫描才能获得行数。 (2)但下面的SQL 语句不会执行全表扫描一样可以获得行数: SELECT rows FROM sysindexes

WHERE id = OBJECT_ID('dbo.Orders') AND indid < 2

7、避免使用动态SQL。(1)动态SQL 难以调试和故障诊断;       (2)如果用户向动态SQL 提供了输入,那么可能存在SQL 注入风险。

8、在写存储过程中,在开始写set  nocount on  ,结束写set nocount off

(当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。 当 SET NOCOUNT 为 OFF 时,返回计数(默认为OFF)。

即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn 行受影响"。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。

注释当SET NOCOUNT 为ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。当SET NOCOUNT 为OFF 时,返回计数。 ... 结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上SET NOCOUNT OFF这样的话,以达到优化)

转载于:https://www.cnblogs.com/niuniu0108/p/7355253.html

你可能感兴趣的文章
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>