一、索引的概念
1.1 索引的作用
1.2 索引的分类(还不清楚到底怎么归类)**
查看有哪些索引: SHOW index;
聚簇索引(主键索引) 每张表只能有一个,数据和索引在同一个文件
按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。
辅助索引(二级索引): 叶子节点并不包含行记录的全部数据
非主键索引,叶子节点=键值+书签(行的索引值)
覆盖索引: (extra 提示using index)
InnoDB存储引擎支持覆盖索引,即从辅助索引中就可以得到查询的记录,而不需要查询聚集索引中的记录了(不需要回表操作)。
覆盖索引并不适用于任意的索引类型,索引必须存储列的值,所以不需要回表操作。
MySQL只能使用B-树.
联合索引:
联合索引也是一棵B+树,其键值数量大于等于2。键值都是排序的,通过叶子节点可以逻辑上顺序的读出所有数据。
单值索引: 一个索引只包含单个列
多值索引、复合索引(组合索引): 即一个索包含多个列
复合索引只会对与创建索引时的排序顺序完全相同或相反的 order by语句进行优化
唯一索引: 索引唯一,但可以null, 声明unique关键字时,会为其字段自动添加唯一索引
1 | // 单值索引 |
1.3 创建
1.4 什么时候该创建索引?
不该创建?
对于最长使用的查询,可以针对性的建立索引来优化速度。
join查询在有索引条件下
驱动表有索引不会使用到索引
被驱动表建立索引会使用到索引