Sql 服务器的持续扫描 - 澄清吗?

2023-12-20

我读了这篇文章关于 http://www.scarydba.com/2008/07/01/constant-scan-in-execution-plans/不断扫描但还是不明白什么时候会用到(人们评论作者说他的文章仍然不被理解):

MSDN :

Constant Scan 运算符将一个或多个常量行引入到一个 询问。计算标量运算符通常用于将列添加到行中 由恒定扫描操作员产生。

很不清楚。

例如 :

为什么SELECT TOP 1 GETDATE()产生:

While select getdate()什么也不产生。 (在执行计划中)。

我想这与不断的扫描有关。所以 :

问题 :

  • 到底什么是持续扫描
  • 如果它是常量,为什么需要扫描某些东西,以及
  • 为什么select top 1 getdate()产生与普通结果不同的结果select getdate()

Because most用于完成查询的运算符是根据一个或多个输入行集和一个或多个输出行集指定的,因此如果您编写需要使用这些运算符之一的查询,那么您最好确保您向该运算符提供的输入是行集。

因此,常量扫描运算符是一种特殊的运算符,它可以接受一个或多个标量输入并生成行集。

它使编写运算符变得更加容易。


为什么select top 1 getdate()产生与普通结果不同的结果select getdate()

因为您要求使用TOP操作员。还有TOP运算符期望有一个输入行集。


为什么我认为关注性能无关紧要:

SET STATISTICS TIME ON
GO
SELECT TOP 1  GETDATE()
GO
SELECT GETDATE()

留言:



SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
  

也就是说,我们甚至无法测量任一语句执行所需的时间。

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

Sql 服务器的持续扫描 - 澄清吗? 的相关文章

  • com.microsoft.sqlserver.jdbc.SQLServerException:不支持“variant”数据类型

    我想创建显示 MSSQL 服务器版本的简单 Java 代码 public void testMSSQLVersion throws Exception System out println nTesting SQL query for MS
  • 为什么我无法在 SQL Server 上查询 OFFSET/ FETCH 查询?

    我想在我的 SQL Server 上运行此查询 如下所示 微软SQL Server管理工作室10 50 1600 1 但它无法识别 OFFSET 因此显示 ERROR SELECT FROM dbo tbl MatchDetail ORDE
  • 如何使用 EntityFramework 7 和 Asp.Net 5 调用 SQL 存储过程

    在过去的几天里 我正在寻找一些有关如何调用Stored Procedure从里面一个Web API控制器方法使用EntityFramework 7 我经历过的所有教程都以相反的方式展示它 即Code First方法 但我已经有了一个数据库
  • IN SQL Server 是 CLR 线程安全的

    我在 SQL Server 和 Exchange Web 服务之间的 CLR 中有一个接口 用于在应用程序之间同步和发送电子邮件 在测试中它可以正常工作 没有任何问题 我们在生产环境中发现了零星问题 其中较长的 Web 服务任务似乎重叠 我
  • 存储过程中的分组和循环

    我需要对 MTH1 MTH2 等列进行求和 但对于我传递的参数 它将为同一帐户代码生成六行信息 这是正确的 它应该产生什么我的问题是如何只返回其中一个数据 但是到目前为止 这就是我的存储过程中六行的总和 ALTER PROCEDURE db
  • SQL Server 2005 中的分层查询

    早在我在 Oracle 商店工作时 我就认为 CONNECT BY 是理所当然的 现在我一直在使用 SQL Server 2005 并且有一些令人讨厌的对象层次结构 具体来说 我们有一个自引用表 其中所有子记录都有一个包含其父记录 ID 的
  • SQL Server 2008-获取表约束

    你能帮我构建一个查询 检索所有表中的约束 每个表中的约束计数 并显示NULL对于没有任何约束的表 这是我到目前为止所拥有的 Select SysObjects Name As Constraint Name Tab Name as Tabl
  • SQL Compact 3.5附加多个数据库/跨数据库查询?

    是否可以将多个数据库附加到 SQL CE 3 5 精简版 例如MasterData sdf Orders sdf 并对它们应用查询 例如 选择 Orders iOrderID Orders cItemID MasterData cItemD
  • 更新语句错误:子查询返回超过 1 个值

    我正在尝试更新列中的所有记录 以便它们以 CD 开头 例如DCE206 将成为 CDE206 UPDATE table SET column REPLACE column1 DC CD WHERE column1 LIKE DC 我正在使用
  • 连接别名计算列中的行

    我有两张表 一张名为 Car 一张名为 Mileage 汽车表有以下列 CarName varchar max 里程表有以下列 CarMileage int CarName varchar max TotalGasTrips int 我的代
  • CDC 已启用,但未填充 cdc.dbo_CT 表

    我已使用以下步骤启用 CDC exec sys sp cdc enable db exec sys sp cdc enable table source schema N dbo source name N table name role
  • 触发器定义中的 DELETE 语句问题

    我创建了一个插入 更新触发器 旨在根据插入的数据更新不同表中的信息 触发器执行 或应该执行 的最后一件事是从目标表中删除所有数据 这些数据的条件在触发器的插入部分期间可能已更改 除了最后的之外 一切似乎都在触发DELETE陈述 它正在执行D
  • 有没有办法将加密的脚本插入 SQL Server 数据库?

    我的公司认为我们编写的数据库脚本是我们知识产权的一部分 在新版本中 我们为用户提供了由两部分组成的设置 桌面应用程序 一个可执行文件 它包含了初始化 更新数据库的复杂性 RedGate SQL Packager 我知道一旦脚本存在我就可以加
  • SQL CASE 语句

    我有以下查询 我想将它们放入 sql CASE 语句中 这样我只有一个查询 但我不知道该怎么做 有人可以帮助我吗 IF SELECT EtlLoadId FROM ssislogs audit processcontrol WHERE Su
  • 在 SQL Server 2014 中使用带有事务的存储过程的 TransactionScope

    我正在使用 C 和 ADO NetTransactionScope在 ASP Net 应用程序中运行事务 该事务应该在多个表中保存一些数据 然后向订阅者发送电子邮件 Question 是否有效使用TransactionScope 当它包含对
  • SQL Server 中不需要的日期时间舍入

    我遇到了一些看起来很奇怪的事情 SQL Server 似乎正在舍入一些DateTime当我将它们保存到时 值不合适datetime列 我怀疑我错过了一些东西 但我找不到它 我正在使用 NET 4 0 针对 SQL Server 2008 运
  • 如何在 SQL Server 会话中设置自动提交?

    如何在 SQL Server 会话中设置自动提交 您可以通过将implicit transactions设置为OFF来打开自动提交 SET IMPLICIT TRANSACTIONS OFF 当设置为ON时 返回隐式事务模式 在隐式事务模式
  • 如何编辑表以启用级联删除?

    我有一个代表用户的表 当用户被删除时我得到 DELETE 语句与 REFERENCE 约束冲突 显然 CASCADE DELETE在SQL Server中并不像我想象的那么容易 需要将选项添加到表中 问题是 我不知道如何添加CASCADE
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做

随机推荐