1. 说说你对索引的认识?
2. 既然你说索引是一种数据结构,那它底层到底是什么呢?
3. B+ 树索引和 Hash 索引有什么区别呢?
4. B+ 树叶子节点可以存放哪些东西?
5. 聚簇索引和非聚簇索引在查询数据时有什么区别?
6. 非聚簇索引一定要回表查询吗?
7. 什么叫索引覆盖?
8. 使用索引有哪些优缺点?
9. 如果要对用户密码字段建索引,你打算建什么索引?
10. 创建联合索引的时候怎么确定哪个字段放前面?
11. MySQL 5.6 开始对索引做了什么优化,了解吗?
index(name, age)
,然后查询 select * from user where name like '张%' and age = 20
,没有索引下推的话,MySQL 会把name like '张%'
的数据都返回到 MySQL 服务端,服务端再去判断这些数据的 age 是否为 20;而有了索引下推的话,查询的时候会先判断 name like '张%'
的这些数据 age 是否为 20,不是的直接忽略。12. 你认为哪些情况适合建索引?哪些情况不适合建索引?
13. 使用索引的时候你会遵循哪些原则?
name like '张% and age = 20'
,那么 age 这个索引将失效;select *
,用到什么列就查什么列,这样可以增加索引覆盖的机率;辅助记忆,诗曰: 全值匹配我最爱, 最左前缀要遵守; 带头大哥不能死, 中间兄弟不能断; 索引列上少计算, 范围之后全失效; 模糊百分写最右, 覆盖索引不写星; 不等空值还有或, 索引失效要少用; 字符引号不可丢, 牢记以上就无忧。