mysql调优1:
资料:
1: 官网
2:
需要掌握的命令:
1: 性能相关命令:profile
2:
/////////////
1: 某一行为null, 数据库难以优化, 使得索引统计,比较更加复杂
2: 如何选择正确的数据类型
- ip地址用整形存: 节省内存,但是可读性行差
3: text类型为什么不被用到? 一般只存文件的地址,这就引入了一个问题,读数据库快还是读文件快?
4: 时间,要注意时区
mysql调优2:
1: 索引
2: 树的演变之路
二叉树-》avl树-》红黑树-》b树-》b+树-》b*树
3: 相关名词: 索引下推, 最左匹配,回表
4: 索引类型
主键索引 + 唯一索引 + 组合索引 + 普通索引
mysql调优3
全排序
hash:扰动函数
索引原理mysql架构实现及日志实现
聚簇索引: 索引和数据放到同一个文件
非聚簇索引: 索引和数据不在同一个文件
查询缓存:
弊端: 这对写操作也会影响,因为当向某个表写入数据的时候,Mysql必须将对应表的所有缓存都设置失效
redolog日志
1: 保证了持久性, 不丢数据高可用
2: 减少磁盘io
3: 实现机制: 先写redolog, 再更新内存, 然后在合适的时机刷到磁盘上面
4: redolog特点:循环写, 效率高
5: Write Ahead Log,即预写日志
6: 是物理日志,记录的是数据页的物理修改
**
一、为了保证事务的ACID特性,理论上每次事务提交都应该刷盘,但此时效率很低,有两种优化方向:
(1)随机写优化为顺序写; redolog的实现
(2)每次写优化为批量写; 每隔一秒,MySQL主动将OS cache中的数据批量fsync
logbuffer -> os_cache: write实现
os_cache -> 磁盘: fsync实现
undolog日志
1: 保证了原子性: 通过回滚实现、
2: undo日志用于记录事务开始前的状态,用于事务失败时的回滚操作
binlog日志
1: 用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。
2: 用于数据库的基于时间点的还原。
如何保证redolog和binlog数据一致性?
prepare+submit二阶段提交
分布式事务
1: 2阶段
2: 3阶段
3: tcc