Posts /

数据库

03 Apr 2020

数据库


ACID

事务的特性:

原子性、一致性、隔离性、持久性

一致性:

这里的一致性和分布式对应的一致性是不相同的。

数据库的一致性:对关系数据库完整性的保证,事务开始之前和事务结束之后关系数据库的完整性约束不会被破坏,和业务上的一致性。

分布式的一致性:分布式系统中多个存储副本数据的一致性。

索引

Mysql添加索引及索引的优缺点

索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问表中的信息。

普通索引,唯一索引,主键索引,联合索引

作用

相当于目录,或者数组下标检索这么一个功能,快速找到所需内容, 提高性能

优点

  1. 通过创建唯一索引,可以保证数据库每一行数据的唯一性(主键自动建立唯一索引【主键索引】)
  2. 可以加快数据的检索速度(适合频繁作为查询条件的字段,where用不到的字段不创建索引
  3. 加速表与表的连接
  4. 使用分组和排序进行检索,减少查询中分组和排序的时间(查询中的排序字段建立索引能大大提高排序速度、统计或分组的字段)

缺点

  1. 创建和维护索引需要时间,时间随着数据量的增加而增加
  2. 索引需要占用物理空间,数据量越大,空间越大
  3. 降低表的增删改效率,每次增删都需要维护索引。(频繁update的不适合创建索引)

SQL索引,及其添加索引和判断是否添加成功;

添加索引:CREATE INDEX indexName ON tableName (colName);

查看索引:EXPLAIN SELECT colName from tableName;

MySQL索引用的B+-Tree

参考:

一步步分析为什么B+树适合作为索引的结构

AVL不适合做索引

AVL不适合作为索引的原因:没有充分利用局部性原理(当一个数据被用到时,其附近的数据也通常会马上被使用。),磁盘IO操作多。

B-Tree

B树,多路搜索树。

B树充分利用磁盘的预读功能。而AVL一次磁盘预读的时候有很多数据都用不上。

B树的一个节点存储多个关键字,节点大小设置为磁盘页的大小,每次读就读整个节点。

B树和AVL的查询次数相同,但是更多的情况不需要去磁盘去找数据,在内存中找,从而加快了速度。

B+-Tree

B+树的数据记录全部放在叶子节点,非叶子节点用来做索引。而叶子节点的其中一个指针指向下一个叶子节点,提高了区间的访问性能。

B+树方便扫库,而B树必须按照中序的方式扫库。

或者B+说对Range Query很方便,而B树范围查询3-7的数据,查到的3后还必须的遍历树来找到下一个块的位置,直到下一个不满足的节点。而B+树可以直接通过叶子节点的指针顺序遍历找到下一个块。

参考:

一步步分析为什么B+树适合作为索引的结构

MySQL索引背后的数据结构及算法原理