首页 > 代码库 > SQL语句优化

SQL语句优化

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这样的话,以达到优化)

SQL语句优化