MySQL速记小册(1)
1
【Q】:Mysql中的数据排序是怎么实现的?
【A】:
- 排序过程中如果字段有索引,则利用索引排序。反之使用文件排序。在文件排序中,如果数据量少则在内存中排序,使用单路排序或双路排序。如果数据量大则利于磁盘文件进行外部排序,一般是归并排序。
2
【Q】:Mysql的Chang Buffer是什么?
【A】:
- Chang Buffer是Mysql InnoDB存储引擎的一个机制,用于暂存对二级索引的删除和更新操作的变更,而不是立刻执行这些操作,随后,当InnoDB进行合适的条件时(如页被读取或Flush操作),会将这些变更写入到二级索引中。
- 作用:
- 提高写入性能,提高对二级索引的变更缓存,可以减少对磁盘的频繁写入,提升插入和更新操作的性能。
- 批量处理,Chang Buffer 可以在后续的操作中批量处理这些变更,减少了随机写入的开销。
3
【Q】:详细描述一下一条SQL语句在MySQL的执行过程
【A】:
- 先通过连接器校验权限。
- 再利用分析器进行SQL语句的词法分析和语法分析,构建解析树。
- 使用优化器选择合适的索引和表连接顺序,最终选择一个最佳的执行计划。
4
【Q】:Mysql主要的存储引擎包括:
【A】:
- InnoDB:支持事务 ,行级锁和外键。提供高并发性能,适用于高负载的OLTP应用。数据以聚集索引的方式存储,提高检索效率。
- MyISAM:不支持事务和外键,适用表级锁。适合读取多,更新少的场景,如数据仓库。具有较高的读性能和较快的表级锁定
- MEMORY和NDB和ARCHIVE。
5
【Q】:Mysql的索引类型有什么?
【A】:
- 从数据结构角度来看,Mysql索引可以分为以下几类:
- B+树索引
- 哈希索引
- 倒排索引(即全文索引 Full-Text)
- R-树索引(多维空间树)
- 从常见的基于InnoDB B+树索引角度来看,可以分为:
- 聚簇索引
- 非聚簇索引
- 索引性质角度来看,普通索引,主键索引,联合索引,唯一索引,全文索引,空间索引
6
【Q】:InooDB 引擎中的聚簇索索引和非聚簇索引区别
【A】:
- 聚簇索引
- 索引叶子节点存储的是数据行,可以直接访问完整数据。
- 每一个表只能有一个聚簇索引,通常是主键索引,适合访问查询和排序
- 非聚簇索引
- 索引叶子节点存储的是数据行的主键和对应的索引列,需通过主键才能访问完整的数据行。
- 一个表可以有多个非聚簇索引,适用于快速查找特定列的数据。
7
【Q】:MySQL里面的回表是什么?
【A】:
- 回表是指在使用二级索引(非聚簇索引)作为进行查询时,由于二级索引中只存储了索引字段的值和对应的主键值,无法获得其他数据。如果要查询数据行中的其他数据,需要根据主键去聚簇索引中查找实际的数据行,这个过程被称为回表。
8
【Q】:索引的最左前缀匹配原则是什么?
【A】:
- Mysql索引的最左前匹配原则是指在使用联合索引时,查询条件必须从索引条件的最左侧开始匹配。如果一个联合索引包含多个列,查询条件必须包含第一列的条件,然后是第二列,以此类推。
- 底层原理:因为联合索引在B+树中的排序方式遵循“从左到右”的顺序,列如联合索引(frist_name,last_name, age)会按照此顺序在B+树中进行排序。
- 组合索引能从左到右依次高效匹配,跳过最左侧字段会导致无法利用该索引。
9
【Q】:Mysq覆盖l索引是什么?
【A】:
- Mysql覆盖索引是指二级索引中包含了查询所需的所有字段,从而使查询可以仅通过访问二级索引而不需要访问实际的表数据(主键索引)。
10
【Q】:索引下推是什么?
【A】:
- 索引下推是一种减少回表查询,提高查询效率的技术。允许Mysql在使用索引查找数据时,将部分查找条件下推到存储引擎层过滤,从而减少需要从表中读取的数据行,减少IO(本应该由service做的操作交给了存储引擎层操作,因此叫做下推)。