为了账号安全,请及时绑定邮箱和手机立即绑定

自定义函数 与 视图 在使用上有什么区别?

自定义函数 与 视图 在使用上有什么区别?

aluckdog 2019-04-09 20:23:50
测试环境:PostgreSQL测试用例:CREATETABLEa(aidserialPRIMARYKEY,namevarchar(20));CREATETABLEb(bidserialPRIMARYKEY,namevarchar(20));CREATETABLEab(abidserialPRIMARYKEY,aidserialREFERENCESa(aid),bidserialREFERENCESb(bid));CREATEVIEWv_abASSELECTa.nameAS"aname",b.nameAS"bname",ab.abidAS"abid"FROMa,b,abWHEREa.aid=ab.aidANDb.bid=ab.bid;CREATEFUNCTIONf_ab(int)RETURNSTABLE(anamevarchar,bnamevarchar)AS$$SELECTa.nameAS"aname",b.nameAS"bname"FROMa,b,abWHEREa.aid=ab.aidANDb.bid=ab.bidANDab.abid=$1$$LANGUAGESQL;INSERTINTOaVALUES(1,'a');INSERTINTObVALUES(2,'b');INSERTINTOabVALUES(12,1,2);这两篇文章把我搞糊涂了:慎用自定义函数和通过自定义函数提高服务器性能抱着"存在即合理"的想法,我想知道到底什么时候该使用自定义函数?另外,当数据量较大时,下面这两条语句执行效率上有区别吗?SELECTaname,bnameFROMv_abWHEREabid=12;SELECTaname,bnameFROMf_ab(12);
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

你的文章是SQLserver的,PostgreSQL我倒没用过。
在SQLserver中视图仅仅是SQL的映射,它一般事不含有程序运算,仅用于查询。
自定义函数是程序块,它支持参数,并且返回类型多样化。
数据库一般提供数据存储的作用,业务逻辑运算却由其它应用程序处理,例如JAVA。如果业务逻辑比较复杂而且高度依赖数据库里的各种数据,这样JAVA与数据库之间可能需要通讯多次,才可以把流程完成。这样无疑会产生交互的时间,所以如果把复杂的运算直接让数据库中计算出来,那效率就会相当高,所以就有了自定义函数。
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 720 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信