zoukankan      html  css  js  c++  java
  • 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这样的话,以达到优化)

  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/niuniu0108/p/7355253.html
Copyright © 2011-2022 走看看