1.设计及模块划分
- 存储(文件系统)
- 程序实例(对文件系统的管理)
- 存储管理(一次加载多个页)
- 缓存机制(LRU)
- SQL解析
- 日志管理(binlog)
- 权限划分
- 容灾机制
- 索引管理
- 锁管理
2.索引模块
(1)为什么使用索引
不使用索引采用的全文检索,当数据小的时候是很快的,但是数据很大的时候就会很慢,因此采用索引,提高查询速度
(2)索引数据结构
- B-Tree
n阶树,每个根节点至少要有两个孩子,每个非根节点至少要有ceil(m/2)最多m个节点,关键字个数是孩子节点个数-1
- B+Tree
关键字个数是孩子节点个数
优点:
查询稳定
磁盘I/O减少
支持范围统计
- hash索引
查询很快,但是不支持范围查询,和排序操作,不能用部分索引查询,不能避免表的扫描,hash值相同的就变成了线性搜索。不稳定。
3.索引和非聚簇索引
聚簇索引:主键,第一个唯一非空索引,默认创建一个
为什么要一定有一个聚簇索引呢?非聚簇索引是需要回表查询的
4.如何定义慢查询和优化
- 根据日志定位慢查询sql(慢日志记录查询比较慢的sql记录)
show variables like '%quer%';
show status like '%show_querues%'//慢sql条数
- 使用explain工具分析
type:找到数据行的类型:index 和all是要进行优化的
extra:using filesort 和using temporary 是需要优化的
- 修改sql,尽量使用索引
5.MyISAM和INNODB