1 . 预发跑 SQL explain
2. 排除 缓存 SQL nocache
3. 看一下行数对不对 不对可以用analyze table t 矫正
4. 添加索引 , 索引不一定是最优的 force index 强制走 索引, 不建议使用
5. 存在回表的情况
6. 覆盖索引避免回表, 不要* ,主键 索引
7. 联合索引,不能无限制建 ,高频 场景
8. 最左前原则 按照索引定义的字段顺序写sql
9 . 合理安排联合索引的顺序
10. 5.6版本之后, 索引下推, 减少回表次数
11. 给字符串 加索引
前缀索引
倒序存储
Hash
12 . 数据库的fush 的时机
1.redo log 满啦, 修改checkpoint flush 到磁盘
2. 系统 内存不足淘汰数据页
buffer pool 要知道磁盘的IO能力, 设置 innodb_io_capacty 设置磁盘的IO PS fio测试
innodb_io_capacity 设置低了, 会让innoDB 错误估算系统能力,导致脏页累积
3. 系统空闲的时候,找间隙刷脏页
4. mysql正常关闭,会把内存脏页 flush到磁盘
13 .inndb刷磁盘速度
1.脏页比例
2.redolog 写盘的速度
3.innodb_fulsh_nieighbors 机械磁盘的随机io不太行 减少随机io性能大幅提升 设置为 1最好
4.现在都是ssd了, 设置为0 就好了, 8.0 之后默认为 0
14. 索引字段不要做函数操作,会破坏索引值的有序性,优化器会放弃走树结构 ,如果触发隐式转换 那也会走cast函数 会放弃走索引
15 字符集 不同可能走不上索引, convert 也是函数走不上
pps:
索引 选择, 1.普通索引,唯一索引,覆盖索引,最左前缀索引
MVCC
1.版本链 在聚集索引中,要两个隐藏列 trx_id roll_pointer
2.读未提交,(直接读取最新版本)
3.序列化 (加锁)
- Read View (读已提交, 每次读取生成一个)(可重复度, 每一次生成一个)
网友评论