Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 派生表执行一次还是三次?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 派生表执行一次还是三次?

Sql 派生表执行一次还是三次?,sql,sql-server,tsql,Sql,Sql Server,Tsql,每次使用派生表时,都将执行该查询。当使用CTE时,该结果集将在单个查询中回调一次且仅回调一次 引号是否表示以下查询将导致对每个聚合函数的调用执行一次派生表三次: SELECT AVG(OrdersPlaced),MAX(OrdersPlaced),MIN(OrdersPlaced) FROM ( SELECT v.VendorID, v.[Name] AS VendorName, COUNT(*) AS OrdersPla

每次使用派生表时,都将执行该查询。当使用CTE时,该结果集将在单个查询中回调一次且仅回调一次

引号是否表示以下查询将导致对每个聚合函数的调用执行一次派生表三次:

  SELECT 
    AVG(OrdersPlaced),MAX(OrdersPlaced),MIN(OrdersPlaced)
  FROM (
    SELECT
        v.VendorID,
        v.[Name] AS VendorName,
        COUNT(*) AS OrdersPlaced
    FROM Purchasing.PurchaseOrderHeader AS poh
    INNER JOIN Purchasing.Vendor AS v ON poh.VendorID = v.VendorID
    GROUP BY v.VendorID, v.[Name]
  ) AS x

thanx

不,这应该是一个过程,看看执行计划

下面是一个示例,表2中的每一行都将运行一些内容

    select *,(select COUNT(*) from table1 t1 where t1.id <= t2.id) as Bla
     from table2 t2

像这样带有运行计数的内容将为table2表中的每一行触发

不,应该是一个过程,请查看执行计划

下面是一个示例,表2中的每一行都将运行一些内容

    select *,(select COUNT(*) from table1 t1 where t1.id <= t2.id) as Bla
     from table2 t2

像这样带有运行计数的内容将为table2表中的每一行触发可能不会,但它可能会假脱机导出的结果,因此只需要访问一次

在这种情况下,CTE和派生表之间应该没有区别


引用自何处?

可能不是,但它可能会假脱机导出的结果,因此只需要访问一次

在这种情况下,CTE和派生表之间应该没有区别


引用自哪里?

CTE或嵌套的不相关子查询通常没有不同的执行计划。无论使用CTE还是子查询,都不会对正在后台处理的中间查询产生影响

关于Tony Rogerson链接,显式临时表比CTE的自连接性能更好,因为它的索引更好。很多时候,当您超越声明性SQL并开始预测引擎的工作过程时,您可以获得更好的结果


有时,使用多层CTE而不是复杂的多临时表进程进行更简单、更易于维护的查询的好处超过了多表进程的性能好处。基于CTE的方法是一条SQL语句,它不会因为一个步骤被意外注释掉或模式更改而被悄无声息地破坏。

CTE或嵌套的不相关子查询通常没有不同的执行计划。无论使用CTE还是子查询,都不会对正在后台处理的中间查询产生影响

关于Tony Rogerson链接,显式临时表比CTE的自连接性能更好,因为它的索引更好。很多时候,当您超越声明性SQL并开始预测引擎的工作过程时,您可以获得更好的结果


有时,使用多层CTE而不是复杂的多临时表进程进行更简单、更易于维护的查询的好处超过了多表进程的性能好处。基于CTE的方法是一条SQL语句,它不会因为一个步骤被意外注释掉或模式更改而被悄无声息地破坏。

引用自何处?但它可能会对导出的结果进行假脱机,因此只需要访问一次。spool是什么意思?它可以生成一个内部临时表,从而避免对派生表进行3次读取。spool是您将在查询计划中看到的步骤顺便说一句,该链接不是很好。他的丑陋的例子是不必要的,可以用一个派生表来完成。CTE只是让它看起来更好,仅此而已。CTE也会降低性能。报价来自哪里?但它可能会对导出的结果进行假脱机,因此只需要访问一次。spool是什么意思?它可以生成一个内部临时表,从而避免对派生表进行3次读取。spool是您将在查询计划中看到的步骤顺便说一句,该链接不是很好。他的丑陋的例子是不必要的,可以用一个派生表来完成。CTE只是让它看起来更好,仅此而已。CTE也会降低性能