MySQL总览

发布时间:2026/7/8 7:07:46
MySQL总览 概述优化定位慢查询SQL 执行计划索引存储引擎索引底层数据结构聚簇索引和非聚簇索引索引创建原则索引失效场景SQL 优化经验其他事务事务特性隔离级别MVCC主从复制分库分表定位慢查询如何定位慢查询介绍当时的情景当时有一个接口的执行速度非常慢压测的结果是 5s我当时是采用了运维工具 Skywalking可以检测出是哪个接口最终是因为 sql 的问题在 MySQL 中开启了慢查询设置的值是 2s一旦超过了这个值就会进行记录慢 SQL 如何进行分析聚合查询多表查询表数据量过大查询深度分页查询explain 查询执行计划索引了解过【索引】吗什么是索引索引是帮助 MySQL 高效获取数据的数据结构可以提高数据检索速率使不需要再全表扫描降低 I/O 成本。数据结构【索引】的底层数据结构了解过吗MySQL 的默认存储引擎 InnoDB 使用 B 树来存储索引。B 树叶子节点存储全部数据非叶子节点存储指向这些叶子结点的指针叶子节点之间是一个有序的双向链表便于区间扫描。为什么不使用【二叉树】存储二叉树不稳定极端场景下可能退化成链表树的深度极大可能导致磁盘 I/O 爆炸空间利用率低磁盘以【页】为单位进行数据读取但是单个二叉树结点只有几个字节。为什么不适用【红黑树】存储红黑树源于平衡二叉树解决了树的退化问题但是没有解决磁盘 I/O 的痛点树的深度依然很深I/O 次数过多红黑树是一种离散的链式结构范围查询时需要遍历大量分散节点出发无数次随机 I/O索引类型什么是【聚簇索引】什么是【非聚簇索引】聚簇索引将数据存储与索引放在一块索引的叶子节点保存的是行数据必须有且只能个有一个非聚簇索引将数据存储与索引分开存储索引的叶子节点存储的是对应数据的主键索引选取的规则如果存在主键那么主键索引就是聚簇索引如果没有主键就会找 UNION 唯一索引作为聚簇索引如果以上都没有InnoDB 会自动添加一个 rowid 作为聚簇索引什么是【回表】回表就是查询数据时通过非聚簇索引查找只能查找到对应数据的主键如果需要查询其他的信息整行数据就需要通过主键从主键索引中进行查找。什么是【覆盖索引】覆盖索引就是查询使用了索引并且需要返回的数据在索引中都能找到此时就不需要回表就成为索引覆盖。怎么处理 MySQL 的超大分页问题当数据量较大时直接 limit 查询会对数据进行排序可以通过【覆盖索引 子查询】进行优化例如select * from tb_sku t, (select id from tb_sku order by id limit 9000000, 10) a where t.id a.id这样就只用对 id 进行排序即可而不需要对全部字段排序。索引创建原则索引创建的原则有哪些对于数据量较大且查询比较频繁的表建立索引对经常作为 查询条件(where)、排序(order by)、分组(group by) 的字段建立索引尽量选择区分度高的列建立索引尽量建立唯一索引区分度越高适用索引的效率越高字符串类型的数据可以使用前缀索引尽量使用联合索引查询的使用多使用覆盖索引节省空间避免回表提高查询效率控制索引的数量索引越多维护的成本就越大会影响数据删改的效率如果索引列不存储控制创建表时就添加 NOT NULL 进行约束便于优化器确定使用哪个索引索引失效什么情况下索引会【失效】一般发生在使用联合索引的场景中联合索引查询时没有遵循【最左前缀法则】会导致索引失效范围查询时范围查询右边的列索引会失效索引列上进行了运算操作会导致索引失效字符串不加单引号会发生数据类型转换导致索引失效以 %like 开头的模糊查询可能会导致索引失效SQL优化谈一谈你对 SQL 优化的经验表设计的优化索引优化SQL语句的调优主从复制、读写分离分库分表事务事务的特性事务的特性是什么ACID原子性事务是不可分割的最小单位要么同时成功要么同时失败一致性事务完成时所有的数据必须保持一致隔离性利用数据库提供的隔离机制保证事务在不受外部并发操作的持久性事务一旦提交或回滚对数据库的改变就是永久的【转账案例】并发事务并发事务会带来哪些问题脏读不可重复读幻读