八股文记录

MySQL

MySQL中的数据排序是怎么实现的?

答案
  • 排序过程中,如果字段命中索引,则利用索引排序。反之,使用文件排序

  • 文件排序中,如果数据量少则在内存中排序,具体是使用单路排序或者双路排序。

  • 如果数据大则利用磁盘文件进行外部排序,一般使用归并排序。

MySQL 的 Change Buffer 是什么?有什么作用?

答案

Change Buffer 是 MySQL InnoDB 存储引擎中的一个机制,用于暂存对二级索引的插入和更新操作的变更,而不立即执行这些操作,随后,当 InnoDB 进行合适的条件时(如页被读取或 Flush 操作),会将这些变更写入到二级索引中。

作用:

  • 提高写入性能:通过将对二级索引的变更暂存,可以减少对磁盘的频繁写入,提升插入和更新操作的性能。
  • 批量处理:Change Buffer 可以在后续的操作中批量处理这些变更,减少了随机写入的开销。

详细描述一条 SQL 语句在 MySQL 中的执行过程。

答案
  1. 先通过连接器校验权限
  2. 利用分析器进行 SQL 语句的词法分析和语法分析,构建解析树
  3. 利用优化器先择合适的索引和表连接顺序,最终选择一个最佳的执行计划
  4. 利用执行器,调用引擎层查询数据,返回结果集给客户端

MySQL 的索引类型有哪些

答案
  1. 按索引列特性分类
    • 主键索引(PRIMARY KEY):唯一标识记录,不允许重复和NULL值,每个表只能有一个‌
    • 唯一索引(UNIQUE):保证列值唯一,允许NULL值,一个表可创建多个‌
    • 普通索引(INDEX/NORMAL):最基本的索引类型,允许重复值和NULL值‌
    • 组合索引(复合索引):在多个列上建立的索引,需遵循最左前缀原则‌
  2. 按数据结构分类:
    • B+树索引:最常用的索引类型,适合范围查询和排序操作‌
    • 哈希索引:基于哈希表实现,适合等值查询但不支持范围查询‌
    • 全文索引:针对文本内容建立的特殊索引,适合大文本字段搜索‌
    • 空间索引:用于地理空间数据类型‌
  3. 其他特殊索引:
    • 前缀索引:对文本字段前N个字符建立索引,可节省存储空间‌
    • 覆盖索引:查询字段都包含在索引中时,无需回表查询‌