1、什么是索引

索引(Index)是帮助MySQL高效获取数据的数据结构

  • 索引在数据量较小时用处不大;但当数据库数据量非常大(百万级以上)时,索引可以极大地提升数据的查询速度。
  • InnoDB引擎索引底层实现默认的数据结构是BTree

2、如何创建索引(都要掌握)

**方法一:**在创建表时,使用SQL语句给某一字段创建某种类型的索引。(详见:索引的分类)

**方法二:**在表创建完成后,使用SQL语句给某一字段添加索引或修改某一字段的索引。

1
CREATE 索引类型 INDEX `索引名称` ON `表名`(`字段名`);  -- 给某个表的某个字段添加某种类型的索引
1
ALTER TABLE `数据库名称`.`表名` ADD 索引类型 INDEX `索引名称` (`字段名`); -- 修改某个表的某个字段的索引

**方法三:**在创建表时或在表创建完成后,使用可视化工具给某一字段添加某种类型的索引。

  • 如:我们可以在SQLyog中选中一个表,右键选择“改变表”,便可查看或修改一个表的索引,如下图所示。

查看或修改索引

3、索引的分类

2.1、主键索引(PRIMARY KEY)

创建命令格式:

1
PRIMARY KEY(`字段名称`)

注:

  • 主键是区分表中每行数据的唯一标识。
  • 一个表只能有一列作为主键。
  • 一个表中各行的主键值是唯一的。

2.2、唯一索引(UNIQUE KEY)

创建命令格式:

1
UNIQUE KEY `索引名称`(`字段名称`)

注:

  • 唯一索引的列不允许行值重复,允许为NULL。
  • 一个表允许多个列(字段)创建唯一索引。
  • 若将某一字段设置为唯一索引,则该索引的Non_unique属性为1,否则为0。

应用举例:一个人的身份证号码是唯一的。

2.3、常规索引(KEY/INDEX)

创建命令格式:

1
KEY `索引名称`(`字段名称`)

注:

  • 常规索引可以使用关键字KEYINDEX标识。
  • 常规索引没有什么限制,允许插入NULL和重复值。

2.4、全文索引(FULLTEXT)

创建命令格式:

1
FULLTEXT `索引名称`(`字段名称`)

注:

  • 最新版的InnoDBMyISAM引擎都支持全文索引功能。
  • 只能在CHAR、VARCHAR、TEXT类型的字段上加全文索引。
  • 主要用来查找文本中的关键字,而不是直接与字段值进行比较。

全文索引需要配合函数match(字段名)和函数against('搜索文本')进行全文搜索。命令格式:

1
select 字段名1,[字段名2,……] from 表名 where match(字段名) against('搜索文本');

附:

  • 显示一个表的全部索引信息:
1
SHOW INDEX FROM `表名`; -- 显示一个表的全部索引信息
  • 分析SQL语句执行的状况:
1
2
EXPLAIN SELECT 字段名1,[字段名2,……] FROM 表名; -- 分析非全文索引SQL语句执行的状况
EXPLAIN SELECT 字段名1,[字段名2,……] FROM 表名 WHERE MATCH(字段名) AGAINST('搜索文本'); -- 分析全文索引SQL语句执行的状况

4、索引的原则

  • 索引不是越多越好。
  • 不要对经常变动的数据加索引。
  • 数据量较小的表不需要加索引。
  • 索引一般加在常用来查询的字段上。

(本讲完,系列博文持续更新中…… )

阿汤笔迹微信公众平台

关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2022/07/05/sqlIndex
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。