索引
索引基础
索引作用
用于快速查找。可以用书的书签进行理解。
索引类型
索引多种类型适用于不用的场景。
B-Tree索引
mysql中默认的存储引擎innodb使用的是B+Tree,但是创建索引时使用的是using BTree。 B+Tree同一层是按照顺序排序的,并且有向右的指针,适合排序、范围查找。 B+Tree分为聚簇索引和非聚簇索引。 聚簇索引是一种数据存放方式,主键和数据都存储在索引的叶子节点中。 聚簇索引只能有一个,如果有主键则使用主键索引为聚簇索引,如果没有,则选择唯一的非空的索引作为聚簇索引,如果再没有,则生成一个。 除了聚簇索引都是非聚簇索引, 非聚簇索引的叶节点存储索引列的值和主键值。所以查找记录需要先查到主键,再通过主键找到对应的记录。 当索引的列包含了要查询的列时,就形成了覆盖索引,覆盖索引是针对某一条查询而言的。覆盖索引不需要再按主键进行查询。
索引好与坏
索引的目的是增加查找速度,如果衡量一个索引是否是一个好的索引,需要看索引的列、索引列的顺序、和使用的查询语句有哪些。看一个索引好坏主要有三个方面
- 查询语句是否使用到了索引列
- 由于BTree索引结构,限制只能高效的使用最左前缀,不能跳过索引某一列,当索引一列使用范围匹配后
- 索引是否可以一次将数据获取,最好是聚簇索引或覆盖索引 使用了索引列,能达到一星索引,
索引优缺点
索引优点
- 索引大大减少了服务器需要扫描的数据量
- 索引可以帮助服务器避免排序和临时表
- 索引可以将随机I/O变为顺序I/O
索引缺点
- 索引会增加额外的存储空间
- 插入数据和修改数据时