一、MySQL体系结构和存储引擎
对于表中数据的存储,InnoDB采用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义是指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
特性 | MyISAM | InnoDB |
---|---|---|
存储限制 | 无 | 64TB |
事务 | 否 | 是 |
锁粒度 | 表锁 | 行锁 |
B树索引 | 支持 | 支持 |
哈希索引 | 不支持 | 支持 |
存储消耗 | 低 | 高 |
内存消耗 | 低 | 高 |
批量插入速度 | 快 | 慢 |
外键 | 不支持 | 支持 |
二、文件
慢查询日志
印着慢查询日志比较重要,可以用来定位一些执行时间比较长的SQL语句。
二进制文件
MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。
二进制日志记录了对MySQL数据库执行更改的所有操作,也就是不包括SELETE和SHOW这类操作,因为这类操作对数据本身并没有修改。然后,若操作本身并没有导致数据库发生变成,那么该操作可能也会写入二进制日志,比如修改的新值与旧值相等。
三、索引与算法
InnoDB支持B+树索引、全文索引、哈希索引,但InnoDB的哈希索引是自适应的,引擎会根据使用情况为表生成哈希索引,不能认为干预在一张表中是否生成哈希索引。