mysql、innodb、索引、锁、事务关系

1、常用有两种数据引擎myisam和innodb;
2、innodb的数据存储结构从大到小依次为tablespace(表空间)、segement(段)、extent(区)、page(页)、row(行);默认情况下page大小为16KB,一个extent最小为1MB最少有64个page


mysqlstoresturts.png

3、innodb的物理存储分为.frm和.ibd文件。其中.frm文件每创建一个表均产生一个frm文件,主要存储表结构信息;.ibd文件分为系统表空间和用户表空间
4、innodb最小按照按照页来存储数据,每个页存储2-200条记录;页内的用户记录按照链表的形式存储,B+树在查找对应数据时是读取整个页数据放到内存里面,然后根据page directory中的稀疏索引和n_owned、next_record读取对应的记录。
5、mysql索引使用B+树,索引分为聚集索引和辅助索引;聚集索引叶子节点直接指向对应数据,一般为主键和唯一索引;辅助索引仅记录对应的数据的指针;
6、锁从原理上分为乐观锁和悲观锁,乐观锁是一种思维方式并不真正对数据加锁,悲观锁是实际加锁,innodb实现的锁为悲观锁。
7、innodb实现了标准的行级锁共享锁(读取)和互斥锁(写入);
8、锁的粒度分为record lock(记录锁:对单一记录进行加锁)、gap lock(间隙锁:对一段记录进行加锁)、next-key lock(next-key锁锁定的是当前记录和之前范围的记录,next-key锁的作用是防止幻读);
9、事务的基本特性是A(原子性)C(一致性)I(隔离型)D(持久性);
10、事务的四种隔离性分别为READ UNCOMMITED(使用查询语句不会加锁,可能会读到未提交的行)、READ COMMITED(只对记录加记录锁而不会在记录之间加间隙锁,所以允许新的记录加到锁定记录的附近,所以多次使用查询语句可能会得到不同的结果)、REPEATABLE READ(多次读取同一范围的数据会返回第一次查询的快照,不会返回不同的数据行,可能会发生幻读)、SERIALIZABLE(innodb隐式的将所有的查询均加上了共享锁,解决了幻读的问题)。mysql中默认的事务隔离级别就是REPEATABLE READ,它通过Next-key lock解决了幻读的问题。
11、mysql结构分为client、sever(Connection/Thread Handing、Query cache、Parser、Optimization、Storage Engine)


mysql结构.png

整理自『浅入浅出』MySQL 和 InnoDB

你可能感兴趣的:(mysql、innodb、索引、锁、事务关系)