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

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

慕侠2389804

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

相关分类

JavaScript