在成为 ADO.NET 信徒多年(很多很多)之后,我终于尝试了解 Linq。在 Linq 中,从 SQL Server 函数返回的表数据类型为 IQueryable,而从存储过程返回的数据类型为 ISingleResult。
由于 IQueryable 更容易处理,所以我想使用它。我的问题:返回表数据的 SQL 函数是否与等效的存储过程一样高效?
最佳答案
My question: is an SQL function that returns table data as efficient as an equivalent stored procedure?
是的,底层代码最终将在 TSQL 中以相同的方式通过查询优化器,因此对于“效率等效”,它必须是一个可靠的"is"。然而,表中的某些东西对函数有利,特别是如果函数可以内联(将外部过滤器纳入函数内部的查询中)。
生成一个(或多个)结果集的 SP 只能从参数中获取输入,而内联表函数可以从外部查询引入附加过滤器。考虑一下:
create function dbo.testif() returns table as return
select * from information_schema.columns
和查询
select * from dbo.testif() where TABLE_NAME like 'S%'
条件TABLE_NAME like 'S%'实际上被带入函数内的查询中,这是存储过程无法做到的。
关于linq-to-sql - 返回表的 SQL Server 2008 函数是否像存储过程一样得到优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718271/