Mysql 的分支、变种与替代

    1. Drizzle
    2. MariaDB
    3. Percona Server
    4. Postgre SQL(PG)
    5. SQLite

    Mysql 体系结构

    1. 连接池
    2. 管理工具和服务
    3. SQL接口
    4. 解析器
    5. 缓存器
    6. 插件式引擎
    7. 文件和日志系统

    image.png

    Mysql 逻辑架构- 连接层、server层和存储引擎

    image.png

    mysql 存储引擎层(插件试)
    mysql 官方引擎

    1. InnoDB
    2. MyISAM
    3. Archive 只支持插入和搜索操作,适用于日志和采集操作
    4. Blackhole 不会持久化,只会建立日志,适用于mysql复制功能,也就是说,把主库的数据同步到从库中
    5. CSV 系统文件格式,也就是个文本文件,其中用逗号分隔,不支持索引,一般用于数据交换
    6. Ferderated 类似于代理引擎
    7. Memory 内存,将数据放到内存中,可以理解为redis,但没redis好用
    8. NDB集群引擎 用于mysql集群,分布式集群用到

    innoDB和myism 比较

    MyISAM InnoDB
    构成上的区别
    1. 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型
    1. .frm文件存储表定义。
    1. 数据文件的扩展名为.MYD (MYData)。
    1. 索引文件的扩展名是.MYI (MYIndex)。

    | 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB | | 事务处理上方面 | MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持 | InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能 | | SELECT UPDATE,INSERT,Delete操作 | 如果执行大量的SELECT,MyISAM是更好的选择

    | 1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
    2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
    3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用 | | 对AUTO_INCREMENT的操作 |
    1. 每表一个AUTO_INCREMEN列的内部处理。
    1. MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。
    1. AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置
    对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
    更好和更快的auto_increment处理

    | 如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。
    自动增长计数器仅被存储在主内存中,而不是存在磁盘上
    关于该计算器的算法实现,请参考
    AUTO_INCREMENT列在InnoDB里如何工作 | | 表的具体行数 | select count() from table,MyISAM只要简单的读出保存好的行数,注意的是,当count()语句包含 where条件时,两种表的操作是一样的 | InnoDB 中不保存表的具体行数,也就是说,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行 | | | *表锁 | 提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in
    SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like “%aaa%” |

    表空间
    系统表空间,自动扩展ibdatal

    独立表空间 - 也就是我们创建了多少表,也就有多少个表空间
    如果说innodb的话,那么就有2个东西,frm和idb

    常用的日志文件

    1. 错误日志 - error.log
    2. 慢查询日志 - slow_query.log
    3. 查询日志 - query.log
    4. 二进制日志 - bin.log