首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >vs sql连接vs本机merge vs格式的情况

vs sql连接vs本机merge vs格式的情况
EN

Stack Overflow用户
提问于 2018-05-28 18:15:17
回答 1查看 53关注 0票数 2

我不得不处理很多我觉得应该运行得更快的代码,我怀疑其中一些问题与在PROC SQL中过度使用case when有关。

从PROC SQL查询中提取的代码示例如下:

代码语言:javascript
复制
 (case 
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('F2F' 'F2' 'ME' 'VI' 'AP') then 'F2F'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('T' 'CB' 'CE' 'VOICE') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL='' and AFFC_BRANCH in ('CC_FR' 'CC_GENT' 'CC_LIEGE' 'CC_NL') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_EMAIL' 'EMAIL' 'EMAIL_PS' 'OE' 'EMA' 'DM_' 'CI' 'LI' 'MP') then 'EMAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_LETTER' 'MA') then 'MAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('EMAIL_OLB' 'OB') then 'IM'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('' 'OT' 'SM' 'EMESSAGE' 'OC') and DWH_CTI_CONTACT.CTIC_CHANNEL='' then 'OTHER'
when t3.AFFC_AFF_CONTACT_ID=. and DWH_CTI_CONTACT.CTIC_CONTACT_ID^=. and t3.AFFC_CHANNEL ='' and DWH_CTI_CONTACT.CTIC_CHANNEL^='' then DWH_CTI_CONTACT.CTIC_CHANNEL
  end) AS Channel

这种类型的实例可以通过各种方式进行重新编码,使用与SQL连接或与SAS合并一起使用的查找表,或者可能使用格式(我并没有深入研究过)。也许还有其他我不知道的方式。

在我开始修改所有这些代码(有很多……)之前,我想知道什么是最佳实践,因为我主要关心的是速度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 18:47:12

一般来说,如果不对整个程序进行高层次的查看,就很难对性能问题提出建议。也就是说,我不认为这种查找逻辑的选择可能会对整体性能产生太大影响-在SAS中,任何最小化磁盘I/O的选项通常都接近最佳。

在其他条件相同的情况下,我的建议是寻找一种在易维护性和避免重复代码之间取得平衡的选择。为此,我可能会使用查找表,因为它们很容易被其他人使用(特别是对于那些刚接触SAS的人),而且如果出现新的类别,您可以根据需要追加行,而无需更改代码。

如果您希望避免在SQL join中使用查找表导致大量额外的磁盘I/O,请考虑在它们上创建适当的索引,并在使用它们之前使用sasfile语句在内存中缓冲较小的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档