SQL查询的IO信息中Worktable是什么咚咚?

0
IO情况分别为:
表'Worktable'。扫描计数0,逻辑读取0 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
表'SalesOrderDetail'。扫描计数1,逻辑读取1238 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
表'Product'。扫描计数1,逻辑读取15 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

已邀请:
0

梁勇 - 天道酬勤、上善若水。爱好商业智能 2014-01-27 回答

关系引擎可能需要生成一个工作表以执行 SQL 语句中指定的逻辑操作。工作表是用于保存中间结果的内部表。某些 GROUP BY、ORDER BY 或 UNION 查询中会生成工作表。例如,如果 ORDER BY 子句引用了不为任何索引涵盖的列,则关系引擎可能需要生成一个工作表以按所请求的顺序对结果集进行排序。工作表有时也用作临时保存执行部分查询计划所得结果的假脱机。工作表在tempdb中生成,并在不再需要时自动删除。

之后查到原因是因为开发人员使用了大量的Cursor存储临时数据导致SQL Server在tempdb创建了工作表,从而导致了大量的开销。替换之后问题解决。所以以后遇到类似的'Worktable'可以重点检查那些GROUP BY、ORDER BY 或 UNION 等需要存贮中间数据的操作,寻找优化解决办法。

具体的可以参考下这个 Worktable大量逻辑读 http://blog.csdn.net/kevinsqls ... 50827
SQLSERVER中的假脱机 http://www.bwscitech.com/a/jis ... .html

要回复问题请先登录注册