深入理解MySQL_经典问题总结1

发布时间:2026/9/28 20:16:53
深入理解MySQL_经典问题总结1
✅MySQL存储引擎有哪些有什么区别MySQL主要的存储引擎有InnoDBMyISAMMemoryArchiveNDB。InnoDB是默认的存储引擎支持事务和外键通过聚簇索引根据主键快速访问数据通过行锁和MVCC机制很好的支持高并发读写通过undolog redolog用于数据备份和恢复保证了事务的acid特性。MyISAM适用于读多写少的场景表级锁因为没有事务机制也没有mvcc寻址机制不存在undolog redolog读写所以读的性能好但是不适用于高并发读写因为并发写会触发表锁阻塞读的线程Memory 存储在内存中表结构存储只能通过sql访问重启就丢没有持久化机制Archive 适用于数据归档数据压缩率高NDB 适用于大规模集群数据自动分片✅MySQL索引类型有哪些MySQL的索引主要分为三类数据结构存储方式索引性质按数据结构分为B树索引InnoDB和MyISAM默认的索引类型是一个平衡树非叶子结点存储索引值叶子结点通过双向链表连接既支持等值查询又支持快速排序和范围查询Hash索引通过计算固定hash值来匹配数据等值查询性能好时间复杂度是O1不适用于范围查询和排序全文索引先文本分词再倒排索引适用于TEXT类型字段值关键字快速匹配类似搜索引擎实现机制空间索引基于R-树结构来存储数据适用于地理位置坐标快速查询按存储方式分为聚簇索引又叫主键索引通过B树存储叶子结点存储完整的行数据默认按照主键顺序排序能够快速根据主键定位到完整行数据并且叶子结点采用双向链表连接支持快速排序和范围查询一个表只能有一个聚簇索引非聚簇索引又叫二级索引叶子结点存储的是索引列的值和主键值查询的时候需要先查二级索引的主键值再根据主键值查聚簇索引里面的数据行这个操作也叫回表回表次数会影响查询效率一个表可以有多个二级索引按索引性质分为主键索引也叫聚簇索引根据主键唯一不可重复的特性快速定位数据行唯一索引唯一索引的列值不可重复支持值为NULL可以有多个NULL唯一索引会认为每个NULL都是不同的普通索引只是用来提高查询效率的索引联合索引由多个列的值组成查询的时候需要满足最左匹配原则全文索引基于文本分词和倒排索引实现适用于对TEXT类型字段值做关键字查询空间索引适用于对GIS数据快速查询✅InnoDB引擎聚簇索引和非聚簇索引的区别聚簇索引和非聚簇索引都是通过B树来存储的B树非叶子结点存储的都是索引值区别在于聚簇索引又叫主键索引一个表只能有一个聚簇索引聚簇索引叶子结点存储的是完整的数据行所以查询的时候可以直接根据索引值定位到完整数据查询效率高非聚簇索引一个表可以有多个非聚簇索引叶子结点存储的是主键值和索引值查询的时候需要先拿到主键值然后再回表查询效率低