面试题答案
一键面试索引提升查询性能的原理
- 数据结构:MySQL 中常用的索引数据结构是 B+ 树(InnoDB 存储引擎默认)。B+ 树将数据按照一定顺序组织,每个节点包含多个键值对和指向子节点的指针。通过这种结构,数据库系统可以快速定位到目标数据所在的位置,而无需全表扫描。例如,在一个包含大量用户记录的表中,若在
user_id
字段上建立索引,当查询特定user_id
的记录时,就可以通过 B+ 树的快速查找功能,迅速定位到对应记录所在的磁盘块。 - 减少磁盘 I/O:全表扫描需要读取整个表的数据,这会产生大量的磁盘 I/O 操作。而索引通常比数据本身小得多,通过索引定位数据,可以大大减少需要读取的磁盘块数量。例如,对于一个百万行数据的表,全表扫描可能需要读取数千个磁盘块,而使用索引可能只需读取几个磁盘块就能找到目标数据,从而显著提升查询性能。
普通索引和唯一索引在提升性能方面的差异
- 普通索引:
- 特点:允许索引列存在重复值。
- 性能提升:在查询时,普通索引可以减少全表扫描的范围。例如,在一个商品表
products
中,对category
字段建立普通索引,当执行SELECT * FROM products WHERE category = 'electronics';
这样的查询时,数据库可以利用索引快速定位到所有category
为electronics
的记录,而不需要扫描整个表。但如果category
列存在大量重复值,索引的效果可能会打折扣,因为可能需要遍历多个索引节点才能找到所有符合条件的记录。
- 唯一索引:
- 特点:索引列的值必须唯一,不允许重复。
- 性能提升:由于唯一性,当使用唯一索引进行查询时,一旦找到匹配的记录,数据库就可以立即停止查找。例如,在用户表
users
中,对email
字段建立唯一索引,当执行SELECT * FROM users WHERE email = 'example@test.com';
这样的查询时,一旦在索引中找到email
为example@test.com
的记录,就无需继续查找,因为唯一索引保证了不会有其他相同email
的记录。这使得唯一索引在查询特定值时,性能可能比普通索引更好,特别是在索引列重复值较少的情况下。同时,唯一索引还可以用于数据完整性约束,防止重复数据插入。