☰
深入理解MySQL_经典问题总结1
2026/9/28 20:16:52 网站建设 项目流程

✅MySQL存储引擎有哪些,有什么区别?

MySQL主要的存储引擎有InnoDB,MyISAM,Memory,Archive,NDB。

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+树非叶子结点存储的都是索引值,区别在于:

聚簇索引,又叫主键索引,一个表只能有一个聚簇索引,聚簇索引叶子结点存储的是完整的数据行,所以查询的时候可以直接根据索引值定位到完整数据,查询效率高

非聚簇索引,一个表可以有多个,非聚簇索引叶子结点存储的是主键值和索引值,查询的时候需要先拿到主键值,然后再回表,查询效率低

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询