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使用行锁来控制并发访问,行锁通过索引记录锁定具体的行。