回答

收藏

数据库功能VS案例陈述

技术问答 技术问答 223 人阅读 | 0 人回复 | 2023-09-14

昨天我们遇到了一个场景,其中必须获取a的类型,db field并且在此基础上我们必须编写该字段的描述。喜欢5 }' k  R: B9 M# M2 w) Z7 k
Select ( Case DB_Type When 'I' Then 'Intermediate'
( L/ x6 G8 K; F& @* h                      When 'P' Then 'Pending'
$ j) @, K- e: B! {% S) B4 X                      Else 'Basic'1 x: W9 |; L+ e" H& W  w% R- J1 u
         End). t, k  K- c/ j7 E* y( B
From DB_table  z: k( \& M2 Q: A' ^' `5 B
我建议编写一个db函数而不是case语句,因为那样会更可重用。喜欢
- w0 J1 M; M( c  K* W; C. @Select dbo.GetTypeName(DB_Type)
8 W$ [( j# u4 @/ Mfrom DB_table" _- K& A0 o1 w3 ?# [
有趣的是,使用数据库的功能将是一个说我们的开发人员的 效率低下 的database functions是 比Case
  I# t. f! w( D* Y2 J. B( Hstatement。我在互联网上搜索了答案,这在效率方面是更好的方法,但是不幸的是,我没有发现任何可以满足的答案。请您的想法启发我,哪种方法更好?
# b3 ~9 J6 h9 r! m5 L% Z& e                6 @0 F: T/ A, T
解决方案:
! s8 |% l8 p1 b  m/ |. q8 G               
9 S7 P$ l* q9 n1 {
; y: q8 I. I: y( M# O# I% S/ y  F6 q- _2 u. x  [" [
                UDF function is always slower than case statements( ^, Q3 V9 d' A2 W  G& a
概括 :
, \0 x8 p* X3 ]1 {  u, W6 }当使用用户定义的函数时会付出巨大的性能损失。当查询将UDF应用于大量的行(通常为1000或更多)时,该损失表现为查询执行时间较差。因为SQL
- k: Y$ |  }' _1 F* s" ~8 l# Y  dServer数据库引擎必须创建自己的内部游标(如处理),所以会产生罚款。它必须在每一行上调用每个UDF。如果在WHERE子句中使用了UDF,则这可能是过滤行的一部分。如果在选择列表中使用了UDF,则在创建查询结果以传递到查询处理的下一个阶段时会发生这种情况。逐行处理最大程度地降低了SQL, ^) v+ l8 m: ~' a- c+ y) W
Server的速度。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则