- 主键索引:因为对于主键索引是不可能重复的,所以在保存到数据页的时候是直接追加插入的(我们默认主键是自增的)
- 非主键索引:非主键一般是可以重复的,假设此时某个联合索引字段的值真的都是一样的,此时只能按照主键字段来排序,这就是为什么非主键索记录在保存的时候还保存一个主键字段的作用
- 索引如果建立太多会占用太多的空间。因为MySQL 会为每个索引维护一颗 B+ 树,毕竟非主键的字段一方面不一定是递增的,另一方面可能是重复的。所以就基于这点,那些频繁增删的字段一定不适合来做索引
- 索引查询遵循原则:等值匹配原则、最左前缀匹配原则、范围查找规则(针对于范围查找只要联合索引的最左侧列有效,其他的都无法使用到索引)、等值匹配+范围查找(等值后面可以范围:满足最左匹配原则,也就是前面的记录必须是确定的,这样子才能继续对后面的数据判断)
- 优化:order by + limit优化 、 分组查询优化
- MySQL 是如何帮我们维护索引的?
- 对于主键索引,MySQL 就是根据主键字段进行排序(一般主键字段我们都设置为自增的,否则真的是在给自己找麻烦,假设主键不是自增的,这还会导致页分裂的发生,这样就很降低性能了);
- 而对于非主键索引(我们一般指联合索引)MySQL 同样会为我们维护一个B+ 树,只不过这颗B+的叶子结点(即数据页)上面的保存的数据仅仅是索引字段数据和主键数据。
- 为什么对于非主键字段只维护索引列?
因为聚簇索引(通过维护主键字段的B+树)中已经有全部记录的 值,如果其他的索引再维护所有的字段,这样就是在浪费空间。
MySQL索引
最新推荐文章于 2024-09-12 15:59:09 发布