本章是mysql技术内幕这本书的读书笔记。可以点击超链接查看所有读书笔记。

1 数据库和实例的概念

数据库:各类文件集合
数据库实例:数据库线程和内存空间共同组成

理解清楚这2个概念

2. 体系结构

mysql基本的体系结构按照书本的内容我做了一些简化,总结为下图:

自上而下来看mysql体系结构中的各个组件:

  1. connectors: 做开发的肯定有印象,需要数据库提供驱动包来连接数据库
  2. connection pool:连接池相关的组件
  3. Management Service&Utilties: 安全、备份、恢复、复制、数据迁移、管理配置相关的组件
  4. SQL interface: SQL接口,包括一些存储过程触发器等
  5. Parser: 查询分析器
  6. Optimizer: 查询优化其
  7. buffer: 缓存cache
  8. pluggable storage engines: 可插拔的存储引擎(MYSQL特色)

3.mysql存储引擎介绍

3.1 InnoDB存储引擎(默认)

mysql默认的存储引擎。其特点主要如下:
1.行级锁

  1. 读操作不上锁
  2. 数据放在一个逻辑的表空间中,可放到一个单独ibd文件中
  3. 采用MVCC来获得高并发
  4. 实现了4种隔离级别,默认为REPEATABLE
  5. 支持全文索引

关于事务隔离级别说明可以查看我的文章四种事务隔离级别

3.2 MyISAM存储引擎

MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP引用。

使用MyISAM存储引擎,MySQL数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成,这与其他使用LRU算法缓存数据的大部分数据库大不相同。

3.3 NDB存储引擎

NDB是一个集群存储引擎。结构采用的share nothing。关于数据库三种架构设计模式可以参考。数据可以全部放在内存中(非索引数据可以选择放到磁盘上),因此主键查找很快。

3.3 Memory存储引擎

表中的数据存放在内存中,如果数据重启或者发生崩溃,表中的数据都将消失。非常适用于存储临时数据的临时表,以及数据仓库中的维度表。默认使用哈希索引,而不是B+数索引。只支持表锁,并发性能较差。而且对类型上有一些约束。

3.4 Archive存储引擎

顾名思义,专门用于存储归档数据。只支持插入和查询操作。本身不是事务安全的存储引擎,设计目标主要是提供高速的插入和压缩功能(压缩比一般可以到达1:10)

3.5 Federated存储引擎

该存储引擎并不存放数据,它只是指向一台远程MySQL数据库服务上的表。可见这是专门用于访问远程MYSQL数据库的。

3.6 Maria存储引擎(值得注意)

新开发的引擎,基本特性和InnoDB很接近。

  1. 支持缓存数据和索引文件
  2. 行锁设计
  3. 提供了MVCC功能
  4. 支持事务和非事务安全的选项
  5. 更好的BLOB字符类型的处理性能

3.7 其他存储引擎

还有Merge,CSV、Sphinx和Infobright等存储引擎。

3.8 总结

根据实际情况选择合适的存储引擎,可以发挥MYSQL的最佳性能。

4. 连接MYSQL的方式

  1. TCP/IP
  2. 命名管道和共享内存:在同一台服务器上可以使用这种方式
  3. UNIX域套接字:LINUX和UNIX环境下使用。