测试环境: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与数据库之间可能需要通讯多次,才可以把流程完成。这样无疑会产生交互的时间,所以如果把复杂的运算直接让数据库中计算出来,那效率就会相当高,所以就有了自定义函数。
添加回答
举报
0/150
提交
取消