MySQL 索引优化面试题

1. 什么是MySQL索引?

索引是数据库表中一个特殊的结构,用于加速数据的检索。

2. MySQL中索引的作用是什么?

索引用于提高查询速度、减少数据库的I/O操作、提高数据库的性能。

3. MySQL索引有哪些类型?

  • BTREE索引:默认类型,适用于大多数场景。
  • HASH索引:用于高效的等值查询。
  • FULLTEXT索引:用于全文本搜索。
  • SPATIAL索引:用于地理空间数据。
  • BLOB和TEXT索引:适用于二进制大对象和文本字段。

4. 创建索引有哪些方式?

  • 在创建表时创建索引。
  • 在表创建后添加索引。
  • 通过ALTER TABLE语句添加索引。

5. 什么是复合索引?如何使用?

复合索引是一个由多个列组合而成的索引。复合索引中各列的顺序非常重要,因为查询优化器会按照复合索引的顺序来使用这些列。

6. 为什么在使用LIKE ‘%abc%’时,索引会失效?

因为MySQL无法利用索引进行部分匹配的搜索,所以索引会失效。

7. SQL优化通常包括哪些步骤?

  • 开启数据库慢查询日志,定位查询效率低的SQL。
  • 检查表设计是否规范,是否存在大量冗余字段。
  • 查看数据表中是否存在大量的冗余字段,字段数据类型是否合理。

8. 怎么知道索引用没用上?

通过EXPLAIN查询SQL执行计划,主要看key使用的是哪个索引。

9. 什么情况下会使索引失效?

  • 使用LIKE操作时,模式以%开头。
  • 使用关键字IN,OR,NULL,!=。
  • 索引列上进行计算或函数操作。

10. SQL语句执行的很慢原因是什么?

可能的原因包括:没有使用索引、使用了不合适的索引、查询条件不适合索引、数据库锁等待、服务器资源限制等。

11. SQL语句的执行顺序是什么?

SELECT、FROM、JOIN、ON、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT。

12. 如何优化查询过程中的数据访问?

使用索引、避免全表扫描、优化查询语句、分析执行计划、数据库设计优化。

13. 如何优化长难的查询语句?

简化查询逻辑、使用合适的索引、避免复杂的JOIN操作、使用LIMIT限制结果集。

14. 如何优化LIMIT分页?

使用索引快速定位到指定页的数据,避免全表扫描。

15. 如何优化UNION查询?

确保每个查询都使用索引,尽量减少每个查询的结果集大小。

16. 如何优化WHERE子句?

使用合适的索引,避免使用函数或计算,确保条件能够利用索引。

17. 大表数据查询如何进行优化?

使用索引、分页查询、避免SELECT *、使用WHERE子句减少返回的字段。

18. 为什么要设置主键?

主键用于唯一标识表中的每条记录,提高查询效率。

19. 主键一般用自增ID还是UUID?

自增ID和UUID各有优缺点,自增ID适用于连续的、递增的主键,而UUID适用于分布式系统中。

20. 字段为什么要设置成not null?

设置为not null可以减少数据存储的空间,提高查询效率。

21. 如何对索引进行优化?

合理设计索引,避免过度索引,使用合适的索引类型,定期维护索引。

22. 使用索引查询时性能一定会提升吗?

不一定,如果查询条件不适合索引,或者索引设计不合理,性能可能不会提升。

23. 什么是前缀索引?

前缀索引是对字符串字段的前几个字符建立索引,适用于字段值的前缀变化不大的情况。

24. 什么是最左匹配原则?

最左匹配原则是指在使用复合索引时,只有匹配了索引的左边第一个字段,才能继续匹配后续字段。

25. 数据库的事务是什么?

事务是一组操作组成的一个逻辑单位,要么全部成功,要么全部失败。

26. MySQL中事务的四个特性是什么?

事务的四个特性是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

27. 什么是数据库的隔离级别?

数据库的隔离级别包括READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

28. 什么是MVCC?

MVCC(Multi-Version Concurrency Control)是MySQL中的多版本并发控制机制,用于实现非锁定读取和事务隔离。

29. 数据库的锁有哪些类型?

数据库的锁类型包括共享锁、排他锁、意向锁等。

30. MySQL中InnoDB引擎的行锁模式及其是如何实现的?

InnoDB使用行锁来控制并发访问,行锁通过索引记录锁定具体的行。