MySql调优

架构图:连接器—分析器—优化器—执行器

表锁:粒度粗、性能高

行锁:粒度细、性能低(锁的索引)

MVCC:版本号控制数据一致

事务:一致性、原子性、隔离性、持久性

隔离级别:读未提交(脏读)、读已提交(不可重复读)、可重复读(幻读)、序列化

死锁:死锁检测、死锁超时

事务日志:日志表存储,日志过大,数据库崩溃,可以按时间划分。数据恢复,提高效率

redo Iog:事务操作,后来的操作,提交后释放空间,innodb

undo log:数据回滚,保存曾经的数据,innodb

Bin log:mysql集群,主库和从库数据同步,所有引擎,三个线程(dump,I/O,SQL)

 

调优:

建表:数据类型尽量要小、数据类型越简单越好、避免NULL值、三大范式、反范式

Explan: 查看sql语句的执行属性

 id : 顺序数字,查询优先级   select_type : 查询类型(普通、子查询、联合查询等)

Table : 查询的表 partition : 分区  type : 访问类型 possible_keys : 能使用的索引

Key : 使用的索引key_len :索引长度 ref :索引的那一列被使用了

Rows : 扫描行数 filtered : 满足的数据所占比例 extra : 额外使用的操作

索引:哈希索引:桶结构,一个索引哈希值对应的是一个链表头的地址

  空间索引、全文索引

B+tree索引:计算机从磁盘读取数据以页(4k)为单位,使用平衡二叉树每个节点读取一次浪费了大量的空间,而B树的每个节点都包含一串数据(多个子结点和键值对)

B+TREE:每个非叶子节点存储更多的关键字,树的高度更低,查询更快

所有索引在叶子节点,每次查询相同的高度,更稳定

所有叶子节点形成一个循环链表可排序,遍历更快

 

  索引的优点:减少扫描数,避免排序和临时表,随机I/O变成顺序I/O

      索引分类:唯一索引,普通索引,全文索引(主要用于长文本),空间索引(主要用于空 间字段)

 

聚簇索引:索引和数据正在同一b+tree,他表示了表的存储顺序,唯一

非聚簇索引(二级索引):叶子保存主键,再用主键去找数据

最左匹配:组合索引,从左向右匹配

索引覆盖:直接在聚簇索引上获取数据

回表:二级索引定位主键,聚簇索引通过主键定位数据

索引下推:判断多个条件时,判断所有条件,减少回表次数

 

查询时尽量不要使用表达式

尽量使用主键索引

使用前缀索引(当很长的字符串时,可以截取前面部分作为索引,但是增大了重复概率)

索引扫描排序

查询范围后的无法使用索引

强制类型转换会全表扫描

经常更新和值范围小(性别、状态)的值尽量不建索引

创建索引不能为NULL

尽量使用linit

索引数量不要太多(5个以下)

posted on 2021-06-23 15:30  .11  阅读(54)  评论(0编辑  收藏  举报