昨天我们得到了一个必须得到db字段类型的场景,并且在此基础上我们必须编写字段的描述.喜欢
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
有趣的是,我们的开发人员之一说使用数据库函数效率低,因为数据库函数比Case语句慢.我通过互联网搜索找到了答案,这在效率方面是更好的方法但不幸的是我发现没有什么可以被认为是满意的答案.请用你的想法赐教,哪种方法更好?
解决方法
UDF function is always slower than case statements
请参阅文章
以下文章建议您何时使用UDF
http://www.sql-server-performance.com/2005/sql-server-udfs/
摘要:
当使用用户定义的函数时,会产生很大的性能损失.当查询将UDF应用于大量行(通常为1000或更多)时,此惩罚显示为查询执行时间较差.由于sql Server数据库引擎必须创建自己的内部游标(如处理),因此会产生惩罚.它必须在每一行上调用每个UDF.如果在WHERE子句中使用UDF,这可能会作为过滤行的一部分发生.如果在选择列表中使用UDF,则在创建查询结果以传递到查询处理的下一阶段时会发生这种情况.这是逐行处理,最大程度地降低了sql Server的速度.