八股文记录

八股文记录
AbeiMySQL
MySQL中的数据排序是怎么实现的?
答案
排序过程中,如果字段命中索引,则利用
索引排序
。反之,使用文件排序
。文件排序中,如果数据量少则在内存中排序,具体是使用单路排序或者双路排序。
如果数据大则利用磁盘文件进行外部排序,一般使用归并排序。
MySQL 的 Change Buffer 是什么?有什么作用?
答案
Change Buffer 是 MySQL InnoDB
存储引擎中的一个机制,用于暂存对二级索引的插入和更新操作的变更
,而不立即执行这些操作,随后,当
InnoDB 进行合适的条件时(如页被读取或 Flush
操作),会将这些变更写入到二级索引中。
作用:
提高写入性能
:通过将对二级索引的变更暂存,可以减少对磁盘的频繁写入,提升插入和更新操作的性能。批量处理
:Change Buffer 可以在后续的操作中批量处理这些变更,减少了随机写入的开销。
详细描述一条 SQL 语句在 MySQL 中的执行过程。
答案
- 先通过连接器校验权限
- 利用分析器进行 SQL 语句的词法分析和语法分析,构建解析树
- 利用优化器先择合适的索引和表连接顺序,最终选择一个最佳的执行计划
- 利用执行器,调用引擎层查询数据,返回结果集给客户端
MySQL 的索引类型有哪些
答案
- 按索引列特性分类
- 主键索引(PRIMARY KEY):唯一标识记录,不允许重复和NULL值,每个表只能有一个
- 唯一索引(UNIQUE):保证列值唯一,允许NULL值,一个表可创建多个
- 普通索引(INDEX/NORMAL):最基本的索引类型,允许重复值和NULL值
- 组合索引(复合索引):在多个列上建立的索引,需遵循最左前缀原则
- 按数据结构分类:
- B+树索引:最常用的索引类型,适合范围查询和排序操作
- 哈希索引:基于哈希表实现,适合等值查询但不支持范围查询
- 全文索引:针对文本内容建立的特殊索引,适合大文本字段搜索
- 空间索引:用于地理空间数据类型
- 其他特殊索引:
- 前缀索引:对文本字段前N个字符建立索引,可节省存储空间
- 覆盖索引:查询字段都包含在索引中时,无需回表查询