哪些查询更好(更有效)?

时间:2017-10-02 13:12:30

标签: sql-server tsql

更好地优化了这两个查询中的哪一个:

SELECT 
    item.id, 
    dbo.fnCalculatePurchasePrice(item.id, 0, DEFAULT, DEFAULT, DEFAULT) AS cost
FROM 
    Item item

SELECT 
    item.id, a.cost
FROM
    Item item
CROSS APPLY
    (SELECT 
         dbo.fnCalculatePurchasePrice(item.id, 0, DEFAULT, DEFAULT, DEFAULT) AS cost) a

我认为第一个查询更好,因为我们只有简单的选择。第二个查询的操作成本更高CROSS APPLY

1 个答案:

答案 0 :(得分:3)

两者的情况类似,因为两个查询都相同..您可以从执行计划中看到相同的内容

下面的代码每行执行

SELECT item.id, dbo.fnCalculatePurchasePrice(item.id, 0, DEFAULT, DEFAULT, DEFAULT) AS cost
FROM Item item

带交叉应用的一个也做同样的事情。对于select cross中的每一行,执行并且空值被拒绝

你可以从下面看到相同的demo ..numbers表有超过70K行

alter function dbo.sc
(
@val int
)
 returns int
as
begin
return @val
end

select * ,dbo.sc(number)
from numbers

select *
from
numbers n
cross apply
(select dbo.sc(number)) b(A)

现在观察两个批次的执行计划成本

enter image description here