加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 数据库函数VS Case语句

发布时间:2020-12-12 06:34:35 所属栏目:MsSql教程 来源:网络整理
导读:昨天我们得到了一个必须得到db字段类型的场景,并且在此基础上我们必须编写字段的描述.喜欢 Select ( Case DB_Type When 'I' Then 'Intermediate' When 'P' Then 'Pending' Else 'Basic' End)From DB_table 我建议编写一个db函数而不是这个case语句,因为它更可
昨天我们得到了一个必须得到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

请参阅文章

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/

摘要:

当使用用户定义的函数时,会产生很大的性能损失.当查询将UDF应用于大量行(通常为1000或更多)时,此惩罚显示为查询执行时间较差.由于SQL Server数据库引擎必须创建自己的内部游标(如处理),因此会产生惩罚.它必须在每一行上调用每个UDF.如果在WHERE子句中使用UDF,这可能会作为过滤行的一部分发生.如果在选择列表中使用UDF,则在创建查询结果以传递到查询处理的下一阶段时会发生这种情况.这是逐行处理,最大程度地降低了SQL Server的速度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读