Sql server 2005 关于查询优化的提示和技巧[SQL Server 2005]

Sql server 2005 关于查询优化的提示和技巧[SQL Server 2005],sql-server-2005,optimization,Sql Server 2005,Optimization,我在stackoverflow中问这个问题是因为它是一个正确的提问地点 我知道这是一个 这是一个非常宽泛的话题,但有些小话题可能真的很方便 对于像我这样的年轻开发人员来说,了解查询优化可能会很有用 关于SQL Server 2005中的查询优化的一些提示和技巧。如果查询速度慢,最明显的出发点是确保它使用索引。基于这里的问题 避免数据类型优先(例如,总是非常相似,包括varchar的长度等) 乙二醇 避免WHERE子句中列上的函数 乙二醇 覆盖指数 GUID:不是聚集索引 尽可能减少连

我在stackoverflow中问这个问题是因为它是一个正确的提问地点

我知道这是一个 这是一个非常宽泛的话题,但有些小话题可能真的很方便

对于像我这样的年轻开发人员来说,了解查询优化可能会很有用


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

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

基于这里的问题

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

  • 避免WHERE子句中列上的函数
乙二醇

  • 覆盖指数

  • GUID:不是聚集索引

      • 尽可能减少连接的总数
      • 考虑查询中使用的表大小
      • 使用索引,因为它们是您的朋友
      • 注意用作键的类型(int-to-int比两个varchar更容易比较)
      • 在可能的情况下,避免使用“Like”查询,首先尝试使用等式获取值

      对于查询,我可以添加到
      gbn
      recursive
      smaclell
      中,如下所示:

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

      在management studio中,运行命令集showplan\u all on,然后运行查询。它们不会运行查询,但执行计划将被转储。在这个输出中查找单词scan,这是没有使用索引的地方。
      ...WHERE tinyintcol = @intvalue
       means a conversion of the column and invalidates an index
      ...WHERE tinyintcol = @tinyintvalue
      
       ...WHERE DATEADD(day, 1, MyCol) > GETDATE()
       should be
       ...WHERE MyCol > DATEADD(day, -1, GETDATE())