MYSQL之流程执行逻辑以及探索索引原理

1.MYSQL之流程执行原理

1.2 MYSQL框架图

msyql是由客户端,服务server以及存储引擎构成的;
客户端:
用于连接mysql数据库,进行CURD操作;
server服务:
用来调用,计算数据以及返回给client端,进行与存储引擎提供的API进行交互;

MYSQL之流程执行逻辑以及探索索引原理_第1张图片

1.3 MYSQL执行流程

如上图图片所示,mysql大致的执行流程图,接下来我们将细节放大;由此图可以看出所有的核心再与执行器和存储引擎的交互上;由于内存和磁盘进行读取数据时,寻址时间较长,所以我们接下来来看。
MYSQL之流程执行逻辑以及探索索引原理_第2张图片
由于执行器和磁盘的数据交互比较频繁,耗时比较久;所以server服务会提供一个buffer——poll的池子来缓存数据页,如果说数据库中某个数据要更新后,则执行器会选择相应的页来进行更新数据,再写入read_log日志,然后 再由read_log日志刷盘到磁盘中;

1.3.1 read_log的作用

由两个1.如果系统崩溃后恢复,则再buffer_pool中的数据不会丢失,可靠性增强,2.由于写read_log日志的过程中是进行顺序追加的,所以会形成顺序I/O访问磁盘,大大较少的磁盘的寻址时间。

1.3.2 buffer-pool的作用

用来缓存数据库中的数据,以便查询时效率的提升;

2.MYSQl之INNOdb引擎;

2.1常见的mysql引擎;

2.1.1 MYISAM

使用这个引擎存储时,磁盘会生成3个文件,1个表结构文件frm,1个索引文件:MYI,一个数据文件:MYD,MYI用来存储索引,但仅保留记录所在页的指针,使用B+树来存储的

2.1.2 INNoDB

1.数据库默认端的数据库存储引擎,由一下特点:
2.可以通过自动生长列,方法是auto_increment。
3.支持事务,默认事务级别为可重复读,通过MVCC模式来实现并发控制。
4.支持外键约束;
5.在INNoDB存在着缓冲管理,通过缓冲池,将数据和索引全部储存起来,加快查询速度;
6.对于INNODB类型的表,物理组织为聚簇表,所有的数据按照主键来组织,数据和索引放在以块,都位于B+树的叶子节点;
7.当然InnoDB的存储表和索引也有下面两种形式:
(1)使用共享表空间存储,所有的表和索引放到同一个表空间
(2)使用多表空间存储,表的结构放到frm中,索引和数据存放到idb文件中,分区表的话,每个分区对应单独的IDB文件,区表的定义可以查看我的其他文章。使用分区表的好处在于提升查询效率。

对于InnoDB来说,最大的特点在于支持事务。但是这是以损失效率来换取的。

2.1.3 Memory

将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。文件是frm。
将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关联。文件是frm。

(1)支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;

(2)支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;

(3)由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失;

(4)查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;

(5)默认使用hash索引。

(6)如果一个内部表很大,会转化为磁盘表。

在这里只是给出3个常见的存储引擎。使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

你可能感兴趣的:(mysql)