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

其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率

User-defined Function

Stored Procedures

Triggers

Change Notification

User-defined Types

Views

UDF

用户定义的function,往往用于select中,不会修改数据本身

UDF可以用SQL实现,也可以用外部语言,右边是PG的例子

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,但是高效的实现是很困难的

最新文章

  1. 连接WCF报EntityFramework.SqlServer 错误的解决方法
  2. 【后台测试】手把手教你jmeter压测
  3. (八)open函数的flag详解
  4. windows日常软件推荐
  5. linux入门学习1
  6. asp.net将数据导出到excel
  7. 数据库SQLite在Qt5+VS2012使用规则总结---中文乱码
  8. mfc socket编程
  9. Linux下,命令 wget 的使用
  10. hdu-1016素数环
  11. corosync集群的选举算法
  12. 用kali执行arp攻击-----------使对方断网
  13. php in_array() 循环大量数组时效率特别慢问题
  14. 爬虫学习--MOOC爬取豆瓣top250
  15. 安装LDAP用户认证
  16. Oracle 19C的下载和安装部署(图形安装和静默安装)
  17. maven的tomcat插件问题
  18. 始终使用属性(Property),而不是字段(Data Member)
  19. Python gui编程pyQt5安装步骤
  20. X11 fluxbox窗口管理器

热门文章

  1. kubectl 命令自动补全
  2. React中的State与Props
  3. Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值
  4. 题解 洛谷P4872 【OIer们的东方梦】
  5. 区别和认识.net四个判等方法
  6. HTML5 WebSocket与C# 建立Socket连接
  7. set/priority_queue的运算符重载
  8. 轮播图方法一,把每个slider-item看成一个对象进行轮播
  9. 002_基础电路_AD快捷键
  10. 洛谷 P5640 【CSGRound2】逐梦者的初心 题解