索引
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 `索引名称`(`字段名称`) |
注:
- 常规索引可以使用关键字
KEY
或INDEX
标识。 - 常规索引没有什么限制,允许插入NULL和重复值。
2.4、全文索引(FULLTEXT)
创建命令格式:
1 | FULLTEXT `索引名称`(`字段名称`) |
注:
- 最新版的
InnoDB
和MyISAM
引擎都支持全文索引功能。 - 只能在
CHAR、VARCHAR、TEXT
类型的字段上加全文索引。 - 主要用来查找文本中的关键字,而不是直接与字段值进行比较。
全文索引需要配合函数match(字段名)
和函数against('搜索文本')
进行全文搜索。命令格式:
1 | select 字段名1,[字段名2,……] from 表名 where match(字段名) against('搜索文本'); |
附:
- 显示一个表的全部索引信息:
1 | SHOW INDEX FROM `表名`; -- 显示一个表的全部索引信息 |
- 分析SQL语句执行的状况:
1 | EXPLAIN SELECT 字段名1,[字段名2,……] FROM 表名; -- 分析非全文索引SQL语句执行的状况 |
4、索引的原则
- 索引不是越多越好。
- 不要对经常变动的数据加索引。
- 数据量较小的表不需要加索引。
- 索引一般加在常用来查询的字段上。
(本讲完,系列博文持续更新中…… )
关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2022/07/05/sqlIndex
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿汤笔迹!