昨天我们遇到了一个场景,必须获取 a 的类型db field
在此基础上我们必须编写该字段的描述。喜欢
Select ( Case DB_Type When 'I' Then 'Intermediate'
When 'P' Then 'Pending'
Else 'Basic'
End)
From DB_table
我建议编写一个 db 函数而不是这个 case 语句,因为那样可重用性更高。喜欢
Select dbo.GetTypeName(DB_Type)
from DB_table
有趣的是,我们的一位开发人员说使用数据库功能将是效率低下 as database functions
are slower than Case statement
。我在互联网上搜索以找到在效率方面更好的方法的答案,但不幸的是我没有找到任何可以被视为满意的答案。请各位赐教,哪种方法更好?
UDF function is always slower than case statements
请参考文章
http://blogs.msdn.com/b/sqlserverfaq/archive/2009/10/06/performance-benefits-of-using-expression-over-user-defined-functions.aspx http://blogs.msdn.com/b/sqlserverfaq/archive/2009/10/06/performance-benefits-of-using-expression-over-user-defined-functions.aspx
以下文章建议您何时使用 UDF
http://www.sql-server-performance.com/2005/sql-server-udfs/ http://www.sql-server-performance.com/2005/sql-server-udfs/
概括 :
使用用户定义的函数时会产生很大的性能损失。当查询将 UDF 应用于大量行(通常为 1000 或更多)时,这种损失表现为查询执行时间很短。造成这种损失的原因是 SQL Server 数据库引擎必须创建自己的内部游标(类似处理)。它必须调用每一行上的每个 UDF。如果在 WHERE 子句中使用 UDF,则这可能会作为过滤行的一部分发生。如果在选择列表中使用 UDF,则在创建查询结果以传递到查询处理的下一阶段时会发生这种情况。
逐行处理最会减慢 SQL Server 的速度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)