Mysql-存储引擎和体系结构


MySQL有哪些常见的引擎,说说他们的区别?

1
show engines; #查看支持的引擎
  • MyISAM:非事务处理存储引擎

    索引放在XX.MYI文件中,数据放在XX.MYD文件中。

    在线分析处理OLAP。

    全文索引。

  • InnoDB:具备外键功能的存储引擎、行锁

    索引也是数据。数据和索引存在一个XX.IDB文件中。

    在线事务处理OLTP。

  • Mermory:基于内存

    Memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但数据会丢失。

    默认hash索引。

  • Archive:数据存档,数据插入后不能修改,只支持insert和select

    针对高写入压缩做了优化的简单引擎,压缩存储1:10。

  • Maria

    MyISAM后续版本

    缓存数据和索引文件,行锁设计,MVCC,支持事务,更好的BLOB字符类型处理性能

  • NDB

    集群存储引擎

    数据全放内存(可以将非索引数据放磁盘)

  • Merge、CSV、Sphinx、Infobright

特点 InnoDB MyISAM Memory Archive
b+树索引 yes yes yes no
MVCC yes no no no
事务 yes no no no
存储限制 64TB 256TB RAM None
索引缓存 yes yes 本身就是缓存 No
外键 yes no no no
锁粒度 row table table row
全文索引 yes yes no no
数据缓存 yes no 本身就是缓存 no

数据库和实例的区别

  • 数据库:物理操作系统文件或其他形式文件类型的集合。
  • 数据库实例:有数据库后台进程/线程以及一个共享内存区组成。

查看MySQL从哪里读取的配置文件

从上到下找my.cnf文件,最终值以最后一个文件中的参数为准。

1
2
3
4
5
6
7
➜  ~ mysql --help | grep my.cnf

order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/Cellar/mysql-client/8.0.18/etc/my.cnf
~/.my.cnf

MySQL体系结构

在这里插入图片描述

  • 连接池
  • 管理服务和工具
  • SQL接口
  • 查询分析器
  • 优化器
  • 缓冲
  • 存储引擎
  • 物理文件

  目录