MySQL 面试题
1 索引
1.1 为什么 InnoDB 存储引擎选择使用 B+ 树索引结构?
- 相对于二叉树,层级更少,搜索效率更高
- 相对于 B 树,B 树无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针也跟着减少,同样要保存大量的数据,只能增加树的高度,导致性能降低
- 相对于 Hash 索引,B+ 树支持范围匹配及排序操作
1.2 以下 SQL 语句,哪个执行效率更高?为什么?
sql
-- tb_user 的 id 为主键,并且为 name 创建了索引
SELECT * FROM `tb_user` WHERE `id` = 10;
SELECT * FROM `tb_user` WHERE `name` = "Howard";通过 id 更快,因为通过 name 需要回表查询。
1.3 对以下 SQL 语句进行优化
sql
SELECT `id`, `name`, `age` FROM `tb_user` WHERE `name` = "zhang";- 方案一:针对
name字段建立索引,但是需要回表查询 - 方案二:针对
name、age两个字段建立联合索引,无需回表查询