MySQL 索引 MySQL 索引

MySQL 索引
MySQL 索引

存储方式区分(物理上的区分)

B+树(tree) 索引

B+树索引又称为 BTREE 索引,``目前大部分的索引都是采用 B+树索引来存储的`

包含的组件

  1. 叶子节点

    包含的内容是:

    表里面的数据行

    指向下一个叶子节点的指针

  2. 分支节点

    包含的内容是:

    其他的分支节点或叶子节点

  3. 根节点

    包含的内容是:

    根节点

本数据结构的应用

表中的每一行,都会在(B+tree)索引上对应一个值, 因此吗,在表进行数据从的查询时,

就可已根据(B+tree)上的索引值确定表中的数据的所在行

哈希索引(Hash)

哈希

也可以翻译为散列

概念:将任意长度的输入(或者叫做映射 pre-image) 通过散列算法转换成固定长度的输出,该输出的值----就是散列值

哈希索引

目前MySQL仅仅MEMORY引擎(利用内存存取的引擎)支持该索引

哈希索引并不是如同B+tree索引的数据结构的方式来查找数据,

而是直接利用散列值(哈希值)计算来获取数据

逻辑区别

逻辑区别,主要是根据索引的用途来区分,共5类

  1. 普通索引:基本索引,提高访问速度 KEY INDEX
  2. 唯一索引:基本索引,避免数据重复 UNIQUE KEY
  3. 主键索引:专门为主键字段创建的特殊索引 PRIMARY KEY
  4. 空间索引:对空间数据类型创建的特殊索引
  5. 全文索引:用于查找文本中的关键字,只有MYISAM存储引擎支持 FULLTEXT

普通索引

  • MySQL中最基本的索引,没有任何的限制,唯一的任务就是加快系统对数据的访问速度
  • 普通索引允许在定义索引的列中插入重复值 空值

为表 student 表的 id 列建立一个索引 index_id

create index index_id on student(id);

主键索引

一张表只能有一个主键索引

唯一索引

可以定义到多个里面

索引的实际操作

显示所有的索引信息

show index from student;

MySQL 索引
MySQL 索引

增加一个全文索引

alter table student add fulltext index student(stuName);

MySQL 索引
MySQL 索引

利用全文索引匹配查询

explain select * from student where match(stuName) aginst('事务');

可以看到,加入全文索引后,与不加全文索引后,所执行的查询类型并不一样

未加全文索引

MySQL 索引
MySQL 索引

加入了全文索引

MySQL 索引
MySQL 索引