MST

星途 面试题库

面试题:MySQL中索引如何影响执行计划的扫描方式

请阐述在MySQL数据库里,不同类型的索引(如普通索引、唯一索引、主键索引)是怎样影响查询执行计划中对表的扫描方式的,举例说明。
14.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

普通索引

  1. 扫描方式影响:普通索引允许在索引列中出现重复值。当使用普通索引进行查询时,数据库可能会利用索引快速定位到符合条件的索引项,但由于存在重复值,可能需要进一步回表操作来获取完整的行数据。如果查询条件涉及多个普通索引列,MySQL查询优化器会评估使用哪个索引或者是否使用索引合并策略。
  2. 举例:假设有一张 employees 表,包含 idnameage 等字段,在 age 字段上创建了普通索引。执行查询 SELECT * FROM employees WHERE age = 30;,MySQL 首先通过 age 索引找到所有 age 为 30 的索引项,然后根据索引项中的指针回表获取每一行的完整数据。

唯一索引

  1. 扫描方式影响:唯一索引确保索引列中的值是唯一的(除了 NULL 值可以重复)。这使得查询时一旦通过唯一索引定位到符合条件的索引项,就可以确定对应的行数据,通常不需要像普通索引那样多次回表(前提是查询的字段都包含在索引中,即覆盖索引)。如果查询条件是唯一索引的完整值,查询速度会非常快,因为能直接定位到唯一的行。
  2. 举例:在 employees 表的 email 字段上创建唯一索引。执行查询 SELECT * FROM employees WHERE email = 'test@example.com';,MySQL 利用 email 唯一索引迅速定位到唯一的索引项,直接获取对应的完整行数据,无需额外回表操作(假设查询字段只有 email 以及索引是覆盖索引的情况)。

主键索引

  1. 扫描方式影响:主键索引是一种特殊的唯一索引,它不仅要求值唯一,而且不能为空。主键索引决定了表中数据的物理存储顺序(聚簇索引),基于主键的查询性能非常高。当使用主键进行查询时,MySQL 可以直接通过主键索引定位到具体的行,不需要额外的回表操作,因为数据行本身就存储在主键索引的叶子节点中。
  2. 举例:假设 employees 表的主键是 id。执行查询 SELECT * FROM employees WHERE id = 1001;,MySQL 利用主键索引直接定位到 id 为 1001 的行数据,由于数据和主键索引紧密关联存储,查询效率极高。