CMU Database Systems - Embedded Database Logic

正常应用和数据库交互的过程是这样的,sql

其实咱们也能够把部分应用逻辑放到DB端去执行,来提高效率数据库

User-defined Function性能

Stored Procedures优化

Triggers命令行

Change Notification3d

User-defined Typesblog

Views事件

 

UDF

用户定义的function,每每用于select中,不会修改数据自己同步

UDF能够用SQL实现,也能够用外部语言,右边是PG的例子it

 

Stored Procedure

存储过程,能够理解成在数据库上执行一个脚本

不但能够读还能够操做修改库

存储过程的执行每每直接在命令行执行

 

Trigger

触发器,按条件去触发逻辑

3个要素,事件类型,事件的范围,何时触发

例子,当foo表被改动的时候,往foo audit表里面插入一条audit记录

首先要定义UDF,log_foo_updates

而后定义trigger,foo_updates,时间是在更新前,before update,范围是每一行,for each row

 

Change Notification

trigger是在数据库内部的操做,若是要把消息通知到外部用户,就须要change Notification

 

User-Defined Type

通常若是要在数据库里面存储复杂类型,有两种方式

是否有更为优雅的方式?

UDT,了解一下

 

View

View是虚拟的,实际上是一种sql改写,你对view写的sql最终会被改写成对原表的查询sql

因此View不会提高查询性能

最要为了表达方便,好比对一个很是复杂的查询生成一个view,那就不用每次都重复写这个复杂查询

还有用处,不想让别人直接读原表的全部知道,用view作一个过滤,只让他看到他应该看的

View因为是虚拟,因此不存在同步问题,原表更新了,view也会一块儿更新,由于都是从新查的

这个和Select...Into不一样,select into是作snapshot,会把内容真正的写入静态表里面,这样若是原表更新了,snapshot是不会跟着变的

还有一种view

物化视图,这个通常只有在商业化数据库中有实现

物化视图就是作优化,他会materialized部分或所有数据,这样查询view的时候性能就会很好,而后当原表更新的时候,物化视图也要跟着被更新

物化视图如何实现的,有不少方法,好比用trigger,可是高效的实现是很困难的

相关文章
相关标签/搜索