求with as (子查询部分)与 临时表区别?

dataadapters 2012-05-21 10:34:21
背景:在实现的一个复杂SQL时,运用了with as 其中,with as 最后得到的结果是5列35行,我用另一个张表去关联这个集合,时间竟然用到惊人的11秒。然后我先把with as 得到的集合先插入临时表中,再去关联另一表,时间就少于1秒。


求原因,求大神,求真项...
...全文
1356 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2012-05-22
  • 打赏
  • 举报
回复
看错了,是6楼,sorry。
gogodiy 2012-05-22
  • 打赏
  • 举报
回复
楼主8楼说的是oracle才有的功能,MSSQL没有。
wyx100 2012-05-21
  • 打赏
  • 举报
回复
#3楼 得分:0回复于:2012-05-21 10:59:05cte(子查询)记录数不多,按理说,不应该差这么远
但是,mssql有时就会有这样出乎意料的情况

Mr_Nice 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
背景:在实现的一个复杂SQL时,运用了with as 其中,with as 最后得到的结果是5列35行,我用另一个张表去关联这个集合,时间竟然用到惊人的11秒。然后我先把with as 得到的集合先插入临时表中,再去关联另一表,时间就少于1秒。


求原因,求大神,求真项...
[/Quote]

差异就在临时表上了。 LZ看看两者的执行计划(Ctrl +L)是否一致。就知道省出来的这1秒发生在何处了。
haitao 2012-05-21
  • 打赏
  • 举报
回复
cte(子查询)记录数不多,按理说,不应该差这么远
但是,mssql有时就会有这样出乎意料的情况
geniuswjt 2012-05-21
  • 打赏
  • 举报
回复
是这样的,你用cte,其实和你直接用子查询效率上没太大差别
而用临时表,是数据真正跑到临时表里了,相当于第2次关联时就是和一个小表关联,效率会很高
  • 打赏
  • 举报
回复
CTE类似于派生表。后面必须出现相应的增删改的语句才可以使用。
建议楼主贴出语句
  • 打赏
  • 举报
回复
没用过
dataadapters 2012-05-21
  • 打赏
  • 举报
回复
恩,追问下:网上说在用with as 时,可以用关键字materialize将结果存储为临时表,各位有用过吗?在网上找了个遍,没找到怎么用,我用的数据库是MS SQL

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧