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,可是高效的實現是很困難的

相關文章
相關標籤/搜索