事务:
事务作为最小操作单位,要么执行成功,要么执行失败。
事务特性:
名称 | 解释 |
---|---|
原子性 | 同一事务要么执行成功,要么执行失败。 |
隔离性 | 多个事务之间互不影响 |
持久性 | 事务提交或回滚后数据回永久保存 |
一致性 | 事务提交前后数据一致,在事务未提交或回滚时,数据会不一致,提交后,或者提交前才会一致 |
事务并发下的会出现的问题
名称 | 解释 |
---|---|
脏读 | 事务A读取到事务B未提交的数据,但是B最后没有提交事务,所以A读取到的是脏数据(虚假的数据) |
虚读 | 虚读又称为不可重复读,在一个事务中两次读取到的数据不一致 |
幻读 | 事务在执行完具体操作后,发现这些操作可能没有应用到某些符合条件的数据上。就好像法生幻觉一样。 |
事务隔离级别:
事务隔离级别 | 脏读 | 虚读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
注: 从上到下安全级别越来越高,效率越来越低
索引
索引是一种以空间换取时间的优化查询的方式
常见的索引结构有
* 二叉树
* 红黑树
* hash
* B-Tree
* B+Tree
二叉树
用key/value的形式创建一个树。根节点的左边都是比跟节点小的值,右边是比根节点大的值,然后所有的节点都遵循这个规则,左小右大的规则。
1
-3 5
-5 -2 3 7
1
2
3
4
5
红黑树
在二叉树的基础上进行了一定优化,会自动的维护这个树,不让这个树的某一个分支过于长 最长与最短的叶子节点到根节点的距离不超过二
hash
用hash算法计算出一个hashCode然后将这个hashCode与行数据的磁盘位置进行绑定,然后下次就可以计算出hashCode找到对应的磁盘位置去出数据
B-Tree
在红黑树的基础上扩大了每个节点的容量,使其不再只能存储一个key/value而是多个
B+Tree
在B-Tree的基础上,设计为除了叶子节点剩下的节点都不存储value值,进一步的扩充了每个非叶子节点的能存储的key的数量并且,每个叶子节点还会存储相邻的节点的磁盘位置
聚簇索引和非聚簇索引
聚簇索引节点上的值存储的是磁盘位置,而聚簇索引存储的是整行数据。减少了I/O次数。