数据库索引概述

BTree索引

BTree分为两种形式:B-Tree和B+Tree,B+Tree的叶子节点之间是单项联通的

B+Tree树的结构特点如下

  1. Max.Degree表示当前的每个节点包含的元素数量
  2. 是一个平衡树
  3. 数据由左至右由小变大
  4. 深度没有上限(和表的大小有关)

如下图所示:

image.png

数据库中BTree的的特性说明

  1. 使用逻辑页的概念来作为一个子节点的元素
  2. InnoDB的逻辑页的大小是16K
  3. 索引列按顺序存储
  4. 索引对多个值的排序是按照CREATE TABLE语句定义的索引时列的顺序
  5. 前缀查找只适用于最左前缀查找

聚簇索引
表就是聚簇索引,innodb的表组织方式

覆盖索引
查询的列全部来自索引,而不是通过二级索引去找了对应的行数据

二级索引
Innodb的行数据和主键进行关联,在使用BTree索引查询数据时,如果没有走覆盖索引那么就会去找当前BTree索引找到主键,然后根据主键去找当前数据行

使用索引的查询类型

  1. 全值匹配
  2. 匹配最左前缀
  3. 匹配列前缀
  4. 匹配范围值
  5. 精准匹配某一列并范围匹配另外一列
  6. 只访问索引的查询(覆盖索引)
  7. 索引还可以用在ORDER BY中
  8. 如果不使用最左前缀则无法使用索引
  9. 索引不能跳过索引列,例如有三个列组成的索引,如果使用了第一列还有第三列,则第三列无法作为索引使用

索引失效原因

  1. 最左前原则:索引是后者建立索引时的字段顺序来安排索引顺序的,无法跳过前面的索引列直接使用后面的索引列
  2. 有针对当前索引的范围查询,范围查询的情况下后续索引列将不在生效
  3. 使用不等于(!=或<>),需要注意<> 和 <=>效果不一样前者不走索引后者可以
  4. 索引所在的列添加参数函数如:data_format(insert_timestamp, '%Y%m%i')

哈希索引

最完美的哈希索引就是直接一条记录一个索引,Innodb的主键约束就是哈希索引;Memory引擎支持非唯一哈希索引。

R-Tree索引

目前MyISAM引擎的支持的一种索引类型,没有最左前缀的限制,可以全方位使用索引

FullText索引(后续补充)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容