ACID
事务的特性:
原子性、一致性、隔离性、持久性
一致性:
这里的一致性和分布式对应的一致性是不相同的。
数据库的一致性:对关系数据库完整性的保证,事务开始之前和事务结束之后关系数据库的完整性约束不会被破坏,和业务上的一致性。
分布式的一致性:分布式系统中多个存储副本数据的一致性。
索引
索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问表中的信息。
普通索引,唯一索引,主键索引,联合索引
作用
相当于目录,或者数组下标检索这么一个功能,快速找到所需内容, 提高性能
优点
- 通过创建唯一索引,可以保证数据库每一行数据的唯一性(主键自动建立唯一索引【主键索引】)
- 可以加快数据的检索速度(适合频繁作为查询条件的字段,where用不到的字段不创建索引)
- 加速表与表的连接
- 使用分组和排序进行检索,减少查询中分组和排序的时间(查询中的排序字段建立索引能大大提高排序速度、统计或分组的字段)
缺点
- 创建和维护索引需要时间,时间随着数据量的增加而增加
- 索引需要占用物理空间,数据量越大,空间越大
- 降低表的增删改效率,每次增删都需要维护索引。(频繁update的不适合创建索引)
SQL索引,及其添加索引和判断是否添加成功;
添加索引:CREATE INDEX indexName ON tableName (colName);
查看索引:EXPLAIN SELECT colName from tableName;
MySQL索引用的B+-Tree
参考:
AVL不适合做索引
AVL不适合作为索引的原因:没有充分利用局部性原理(当一个数据被用到时,其附近的数据也通常会马上被使用。),磁盘IO操作多。
B-Tree
B树,多路搜索树。
B树充分利用磁盘的预读功能。而AVL一次磁盘预读的时候有很多数据都用不上。
B树的一个节点存储多个关键字,节点大小设置为磁盘页的大小,每次读就读整个节点。
B树和AVL的查询次数相同,但是更多的情况不需要去磁盘去找数据,在内存中找,从而加快了速度。
B+-Tree
B+树的数据记录全部放在叶子节点,非叶子节点用来做索引。而叶子节点的其中一个指针指向下一个叶子节点,提高了区间的访问性能。
B+树方便扫库,而B树必须按照中序的方式扫库。
或者B+说对Range Query很方便,而B树范围查询3-7的数据,查到的3后还必须的遍历树来找到下一个块的位置,直到下一个不满足的节点。而B+树可以直接通过叶子节点的指针顺序遍历找到下一个块。