上一次在面试官:来说说MySQL的常见优化方案……中说到 MySQL 性能优化的方案很多,因此它可以全面地考查一个程序员的经验是否丰富。
当然对于这个问题的回答也是可深可浅,不同的岗位对此问题的要求也是不同的。MySQL 可以引申出更多的面试问题,比如:
- 联合索引需要注意什么问题?
- 如何排查慢查询?
使用了 B+ 树的 MySQL 数据库引擎,比如 InnoDB 引擎,在每次查询复合字段时是从左往右匹配数据的,因此在创建联合索引的时候需要注意索引创建的顺序。
例如,我们创建了一个联合索引是 idx(name,age,sex)
,那么当我们使用 姓名+年龄+性别
、姓名+年龄
、姓名
等这种最左前缀查询条件时,就会触发联合索引进行查询;然而如果非最左匹配的查询条件,例如 性别+姓名
这种查询条件就不会触发联合索引。
当然,当我们已经有了(name,age)
这个联合索引之后,一般情况下就不需要在 name
字段单独创建索引了,这样就可以少维护一个索引。
慢查询
慢查询通常的排查手段是先使用慢查询日志功能,查询出比较慢的 SQL 语句,然后再通过 explain