读取表变量的查询可以在 SQL Server 2008 中生成并行执行计划吗?

2024-02-11

首先,从BOL http://msdn.microsoft.com/en-us/library/ms175010.aspx:

修改的查询table变量不生成并行查询执行计划。当非常大时,性能可能会受到影响table变量或复杂查询中的表变量被修改。在这些情况下,请考虑使用临时表。有关详细信息,请参阅创建表 (Transact-SQL)。读取的查询table不修改变量的情况仍然可以并行化。

这似乎很清楚了。查询read表变量在不修改的情况下仍然可以并行化。

但随后在SQL Server 存储引擎 http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspxSunil Agarwal 在 2008 年 3 月 30 日关于 tempdb 的一篇文章中这样说道:

涉及表变量的查询不会生成并行计划。

Sunil 是否解释了 BOL re: INSERT,或者 FROM 子句中表变量的存在是否妨碍了并行性?如果是这样,为什么?

我特别考虑控制表用例,其中您有一个小的控制表连接到一个更大的表,以映射值,充当过滤器,或两者兼而有之。

Thanks!


好的,我有一个并行选择,但是not在表变量上

我已经将其匿名化并且:

  • Big ParallelTable 具有 900k 行和宽度
  • 由于遗留原因,Big ParallelTable 部分非规范化(稍后我会修复它,保证)
  • BigParallelTable 经常生成并行计划,因为它不理想并且“昂贵”
  • SQL Server 2005 x64、SP3、内部版本 4035、16 核

查询+计划:

DECLARE @FilterList TABLE (bar varchar(100) NOT NULL)

INSERT @FilterList (bar)
SELECT 'val1' UNION ALL 'val2' UNION ALL 'val3'

--snipped

SELECT
     *
FROM
    dbo.BigParallelTable BPT
    JOIN
    @FilterList FL ON BPT.Thing = FL.Bar

StmtText
  |--Parallelism(Gather Streams)
       |--Hash Match(Inner Join, HASH:([FL].[bar])=([BPT].[Thing]), RESIDUAL:(@FilterList.[bar] as [FL].[bar]=[MyDB].[dbo].[BigParallelTable].[Thing] as [BPT].[Thing]))
            |--Parallelism(Distribute Streams, Broadcast Partitioning)
            |    |--Table Scan(OBJECT:(@FilterList AS [FL]))
            |--Clustered Index Scan(OBJECT:([MyDB].[dbo].[BigParallelTable].[PK_BigParallelTable] AS [BPT]))

现在,考虑一下,表变量几乎总是表扫描,没有统计信息,并假设一行“估计行数 = 1”,“实际.. = 3”。

我们可以声明表变量不并行使用,但包含计划可以在其他地方使用并行性吗?所以 BOL 是正确的,而 SQL Storage 文章是错误的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取表变量的查询可以在 SQL Server 2008 中生成并行执行计划吗? 的相关文章

  • 如何手动设置auto_increment的下一个值?

    我手动向表中添加了一些行 并且还手动设置了 ID 自动增量 现在 当我尝试通过我的应用程序将新行添加到数据库表中时 我收到错误 创建的 ID 值已存在 如何手动设置下一个ID值 例如 在表中我必须有ID 那么如何告诉PostgreSQL 下
  • 对 SQL 时间序列进行采样

    我有一个日期时间的时间序列 存储在 mySQL 中的双列 并且希望每分钟对时间序列进行采样 即以一分钟的间隔提取最后一个值 有没有一种有效的方法可以在一个 select 语句中执行此操作 蛮力方法将涉及选择整个系列并在客户端进行采样或为每个
  • mclapply 用户时间大于已用时间

    我正在尝试使用mclapply的功能parallel封装在R 该函数通过计算对数似然距离将值分配给序列矩阵 这是一个 CPU 密集型操作 所结果的system time价值观令人困惑 gt system time mclapply work
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU
  • 如何使用 Alter Table 在 Access 中创建小数字段?

    我想以编程方式在 MS Access 表中创建一个新列 我尝试过很多排列ALTER TABLE MyTable Add MyField DECIMAL 9 4 NULL 并得到 字段定义中的语法错误 我可以轻松创建一个数字字段Double类
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • 如何在 SQL Server 2008 中使用 GUID 数据类型?

    我想使用建立一个员工表SQL SERVER 2008 在我的表中 我希望为每个员工提供一个 ID 我听说过GUID我有点明白它是一种数据类型 但我无法使用它 你能告诉我使用它的方法吗 顺便说一句 假设我想要这样的东西 CREATE TABL
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • 删除前导零

    给定列中的数据 如下所示 00001 00 00026 00 我需要使用 SQL 删除空格后面的所有内容以及值中的所有前导零 以便最终输出为 1 26 我怎样才能最好地做到这一点 顺便说一句 我正在使用 DB2 这已在 DB2 for Li
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • SQL Like 带有子查询

    我怎样才能做到这一点 SELECT FROM item WHERE item name LIKE SELECT equipment type FROM equipment type GROUP BY equipment type 内部子查询
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 过滤项目来源

    通过此代码 我设置了数据网格的 ItemsSource 不过 我有更多的 wpf 控件来过滤数据网格 例如从时间范围过滤数据网格 我可以为此编写一个新查询 但这似乎没有必要 因为数据已经可用 我只需要过滤它 最好的方法是什么 我能得到的任何
  • 尚未为此带有 SQL Server 的 DbContext .NET Core 配置数据库提供程序

    我一直用这个把头撞在墙上 并且一直在谷歌上搜索无济于事 我刚刚开始一个新的 ASP NET Core MVC 项目 我已将这两个包安装 更新为 2 2 0 Microsoft EntityFrameworkCore SqlServer Mi
  • 选择两列中两个日期之间的记录

    如何选择两列中两个日期之间的记录 Select From MyTable Where 2009 09 25 is between ColumnDateFrom to ColumnDateTo 我有一个日期 2009 09 25 我喜欢选择
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • sql脚本变量默认值

    我有一个脚本文件 例如测试 sql 我想从另一个脚本调用它 比如 caller sql 在 sqlcmd 模式下使用 r test sql 这工作正常 但我想在 test sql 中使用脚本变量 当我从 caller sql 调用 test
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可

随机推荐

  • C++11 变量缩小,没有 GCC 编译器警告

    缩小范围的概念似乎非常简单 但是 有人可以解释一下为什么下面的某些代码会导致 缩小 编译器错误而其他代码则不会 此代码会按预期产生错误 constexpr int a 255 unsigned char b a OK unsigned ch
  • 这种生产者/消费者实现有什么问题?

    所以我正在考虑在 C 中使用简单的生产者 消费者队列 我最终将使用 boost 进行线程处理 但此示例仅使用 pthreads 我最终还将使用一种更加面向对象的方法 但我认为这会掩盖我目前感兴趣的细节 无论如何 我担心的具体问题是 由于此代
  • 如何获取循环发送的每条短信的发送报告android?

    我正在开发短信应用程序 我需要循环发送短信 注册了 SENT 和 DELIVERED 状态的广播接收器 但问题是如何区分哪个送达通知是针对我发送的哪条短信 我正在使用 SMSMANAGER 类发送短信 我的问题与这里讨论的类似 如何监控每条
  • Python 在 Windows 7 上启动非常慢

    在我的 Windows 7 计算机上加载 Python 所需的时间比在虚拟机 在 Windows 内部相同硬件上 上运行的 Ubuntu 14 04 长 17 倍 Anaconda3发行版在Windows和Ubuntu上使用默认的pytho
  • 将图像添加到项目(旋转器)

    您好 我是 Android 爱好者 我想将图像添加到我的微调项目中 不幸的是 我不知道该怎么做 下面是我的 xml 文件和 MainActivity 谢谢阅读 XML FILE
  • 如何确定UIBarButtonItem在UIToolbar中的位置?

    确定 UIToolbar 中 UIBarButtonItem 的 x y 位置的最简单方法是什么 我找到的唯一答案是有什么方法可以知道 uibarbuttonitem 被绘制在哪里 http www cocoabuilder com arc
  • 如何在 jQuery 中编辑 CSS 规则?

    目的是动态地将行添加到表中 并且稍后手动应用规则不太好 而且更慢 具体的例子是我正在创建一个树表来表示文件夹目录 每个文件夹都是一个div 每一个div 有一个ul与li对于每列的信息 这些li有一个与列名相同的类名 这提供了列宽 但是我想
  • 在 bash 中解析 mobileprovision 文件?

    我正在构建一个 php bash mysql 系统 用于自动分配 iPhone 应用程序 但我想读取项目的 mobileprovision 文件中的应用程序标识符密钥 并据此更改它的 info plist 文件 如果 cfbundleide
  • C语言中printf函数是如何工作的?

    我在测试printf函数时遇到了一个问题 首先我写这样的代码 int main void char a a printf a f n a return 0 输出是 然后我写代码 int main void float b a printf
  • PHP 大括号,这段代码的含义是什么

    我有这段代码 用于从数据库获取查询 在MyBB http www mybb com来源 query SELECT fields FROM this gt table prefix table 我的问题是 什么意思 table table 和
  • 如何使用管道运行命令?

    我正在尝试使用 execvp 运行 ls wc 所以我创建了一个管道 然后创建了一个子管道 我关闭父 子中适当的 读 写 端 然后将另一端映射到标准输出 标准输入 然后我在父级中使用 execvp 运行 ls 在子级中使用 wc 当我运行程
  • Visual Studio Code 不使用池映射将调试器附加到 python 中的多进程

    你好 我正在尝试在 python 中调试多进程 下面是我使用 Pool 运行多进程的一部分 pool Pool num half logical cpus pool result dict pool starmap process batc
  • 将 NSArray 转换为 NSMutableArray Swift

    我正在尝试转换self assets NSArray to NSMutableArray并将其添加到picker selectedAssets这是一个NSMutableArray 这段代码在 swift 中会是什么样子 Objective
  • 如何强制用户下载图像(如下载 pdf)?

    因此 我编写了一个图像库 其中包含下载原始图像的选项 默认情况下 它显示图像的调整大小版本 我很想知道如何 下面的代码将强制用户保存 pdf 而不是使用浏览器查看它 我希望通过将单击操作与 jQuery 绑定来实现图像 jpg gif pn
  • Material-UI [v0.x] 悬停样式上的 RaisingButton

    我想更改悬停时 Material UI RaisingButton 的样式 但似乎没有特定的选项可以做到这一点 因为悬停时发生的情况是由材料设计指南定义的 然而 当鼠标悬停在按钮上时 有什么方法可以更改按钮的样式 主要是颜色和背景颜色 吗
  • C# 中 itextsharp 中的文本格式设置

    我正在尝试使用我的 C 软件创建 pdf 文件 我在用itextsharp库来创建客户账单收据 但是我无法格式化文本 我们如何格式化pdf文件中的文本 仅新行字符 n似乎正在工作 我们如何使用制表符格式化文本 附件是 pdf 文件中文本的屏
  • 如何在 Unity 中创建一个可以显示由许多小图像组成的纹理的着色器

    所以我想做的是从 SQL 表加载卫星图像并将它们包裹在一个球体周围以创建一个地球仪 我知道我已经加载了所涵盖的图像 我只是不确定如何使我的着色器以正确的方向显示图像 我去了 Unity 论坛并查看了这段代码 https docs unity
  • 从Python中的函数返回错误字符串

    我在 Python 中有一个类函数 它要么返回成功 要么返回失败 但如果失败 我希望它发回特定的错误字符串 我想到了 3 种方法 将变量 error msg 传递给最初设置为 None 的函数 如果出现错误 它将设置为错误字符串 例如 if
  • 如何使用 C# Windows 应用程序将图像从 byte[] 写入 MS WORD

    我尝试从以下位置写入数据FileStream StreamWriter到一个word文件 当数据是文本格式时它工作正常 使用StreamWriter 但是当我尝试同样的方法时Binarywriter 用于将图像写入Word文档 它错误地写入
  • 读取表变量的查询可以在 SQL Server 2008 中生成并行执行计划吗?

    首先 从BOL http msdn microsoft com en us library ms175010 aspx 修改的查询table变量不生成并行查询执行计划 当非常大时 性能可能会受到影响table变量或复杂查询中的表变量被修改