【问题标题】:Tips and Tricks about query optimization [SQL Server 2005]关于查询优化的提示和技巧 [SQL Server 2005]
【发布时间】:2013-07-19 03:49:33
【问题描述】:

我在 stackoverflow 中问这个问题,因为它是问的正确地方......

我知道这是一个 非常广泛的主题开始,但一些小主题可能真的很方便......

了解查询优化可能对像我这样的年轻开发人员有用..

关于 SQL Server 2005 中的查询优化的一些提示和技巧..

【问题讨论】:

    标签: sql-server-2005 optimization


    【解决方案1】:

    基于此处的问题

    • 避免数据类型优先(例如,总是很相似,包括 varchar 的长度等)

    例如

    ...WHERE tinyintcol = @intvalue
     means a conversion of the column and invalidates an index
    ...WHERE tinyintcol = @tinyintvalue
    
    • 避免在 WHERE 子句中的列上使用函数

    例如

     ...WHERE DATEADD(day, 1, MyCol) > GETDATE()
     should be
     ...WHERE MyCol > DATEADD(day, -1, GETDATE())
    
    • 覆盖索引

    • GUID:非聚集索引

    【讨论】:

      【解决方案2】:

      如果您的查询速度较慢,最明显的起点是确保它使用的是索引。

      【讨论】:

      • 在管理工作室中,运行命令 set showplan_all on 然后运行您的查询。他们的查询不会运行,但执行计划将被转储。在此输出中查找单词 scan 这是未使用索引的位置。
      【解决方案3】:
      • 尽可能减少连接总数
      • 考虑查询中使用的表大小
      • 使用索引,因为它们是你的朋友
      • 注意用作键的类型(int 到 int 比两个 varchar 更容易比较)
      • 尽可能避免使用“Like”查询尝试首先使用相等来获取值

      【讨论】:

        【解决方案4】:

        对于我可以添加到gbnrecursivesmaclell 的查询如下:

        • 尽量减少子查询、连接
        • 避免任何过度锁定,节省检查点
        • 使用编译指示在内存中设置临时表的创建
        • 使用编译指示设置同步关闭
        • 使用编译指示禁用触发器(如果可能)
        • 在事务中嵌入 INSERTDELETE 查询
        • 有时UPDATE 处理多条记录比再次插入它们要慢。因此建议选择、删除,而不是以编程方式更新记录并使用现有键重新插入(注意 CASCADETRIGGERS
        • 请与您的系统管理员确认数据库缓存是否应该打开

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 2010-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多