linq-to-sql - 返回表的 SQL Server 2008 函数是否像存储过程一样得到优化?

标签 linq-to-sql sql-server-2008 function stored-procedures

在成为 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/

相关文章:

r - 将 dplyr {{ }} 与函数内的聚合一起使用时出错

返回实例变量的 c++ 方法可以访问变量中的数据但不能更改它,但编译时不会产生错误

使用函数和字符数组计算字符串长度的C程序

c# - IDENTITY_INSERT 设置为 OFF(并且应该是)

asp.net-mvc - MVC-mini-profiler 和 Linq-2-SQL

c# - Linq to sql 按多条记录进行分组

c# - 低效的 LINQ - 知道 SQL 应该是什么 - 无法到达那里

c# - 如何删除一个表

sql - 获取事务中插入的记录数

c# - 在 for 循环中执行 SQL 查询