安全第二天

一、B+TREE的存储过程
在这里插入图片描述
对比B树的数据存储结构可以看到:

1、B+Tree 所有的数据都存储在叶子节点上。
2、B+Tree 所有的叶子节点之间是一种链式环结构。
那么在这个过程中到底读取了多少条数据呢?
假设B+Tree 读取数据的深度跟 B-Tree 的深度一样,都是三层,那么同样的道理每个磁盘的大小为 16kb。
那在 B+Tree 中非叶子节点可以存储多少数据呢?一般来说我们每个表都会存在一个主键。
根据三层来计算,第一层跟第二层存储的是 key 值,也就是主键值。

由于 int 类型所占的内存是 4Byte(字节),指针的存储就给个 6Byte,一共就是 10Tybe,那么第一层节点就可以存储 161000/10=1600。
同理第二层每个节点也是可以存储 1600 个 key。
第三层是叶子节点,每个磁盘存储大小同样安装 BTree 的计算一样,每条数据占 1kb。
那么在 B+Tree 中三层可以存储的数据就是 16001600*16=40960000。
二、触发器的存储过程
1、存储过程只在创建时进行编译,以后每次执行存储过程都不需要再重新编译,而一般Sql语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
2、通常,复杂的业务逻辑需要多条sql语句。这些语句要分别地从客户机发送到服务器,当客户及和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的忘了传输就会大大减少,降低了网络负载。
3、存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
4、安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用EXECUTE权限调用存储过程,无需拥有访问地测嗯数据库对象的显示权限。
5、存储过程分类
存储过程分为系统存储过程和自定义存储过程。

(1)、系统存储过程
系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程

(2)、自定义存储过程
自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功,并不能像函数那样被直接调用,只能利用execute来执行存储过程。
三、substring与substr的区别
substring和subsrt都是获取指定位数 字符串的方法;

语法:

substring(start,end)/substring(one);

substr(start,end)/substr(one);

这两个方法,里面的参数可以是一个也可以是两个。两个参数时,substring是获取从start位开始到end位之间的字符串,而substr是获取从start位开始后end位的字符串;(两种方法都包含start位的字符串,区别在于ubstring不包含end位的字符串,substr包含)

四、truncate和delete的区别

1、truncate
删除表中的内容,不删除表结构,释放空间;

2、delete
删除内容,不删除表结构,但不释放空间
3、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

4、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

5、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

6、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

7、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

8、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

9、truncatetable不能用于参与了索引视图的表。

在这里插入图片描述
10、在速度上,一般来说truncate > delete。

如果想保留表而将所有数据删除,如果和事务无关,用truncate就好。

如果和事务有关,或者想触发trigger,还是用delete。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值