MySQL——索引

索引基本概念

索引的定义

索引相当于目录,是添加在数据库表的字段上添加的。使用索引可以有效提高查询速率。

索引的副作用

索引需要占据额外的磁盘空间,在插入和修改数据时要花费更多的时间,因为索引也要随之变动

索引的类型

主键索引(Primary Key):加在唯一能标识一组数据的字段或字段组上(主键或主键组),不能为空,可以确定唯一数据记录在数据库表中的位置。

唯一索引 (Unique): 避免同一个表中某数据列中的值重复(只要求字段或字段组的内容唯一),不能为空,但是可以有多个唯一索引。

常规索引(Index):没有什么限制,可以重复,可以为空,主要用来加速查询。

全文索引(FullText).:快速定位特定数据,只能用在CHAR , VARCHAR , TEXT等数据列类型。在执行复杂文本的搜索时非常有用。

空间索引:MySQL在5.7之后的版本支持了空间索引,字段必须不为空,主要用于GIS(地理信息系统)和测绘,可以快速查找特定区域的所有对象或与一个对象相邻的对象。

组合索引:一个或多个字段的索引,这些字段的组合必须是唯一的,遵循最左原则,可以提高在多字段查询的效率。

创建索引

直接创建索引(create index)

注意!主键索引无法使用此方式 进行创建

CREATE INDEX 索引名 ON 表名 (列名[(length)]);

例:create index name_index on SC(name);

修改表结构方式添加索引(alter update)

ALTER TABLE 表名 ADD INDEX 索引名 (列名);

例: alter table SC add index id_index (id);

创建表结构时创建索引(create table)

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名))

例: create table SC( id int(10), name varchar(20), index id_index (id));

注意事项

创建索引应当满足最左前缀原则。

最左前缀原则:

最左优先,以最左边的为起点任何连续的索引都能匹配上。

(1)如果第一个字段是范围查询需要单独建一个索引;

(2)在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边;

当创建(a,b,c)复合索引时,想要索引生效的话,只能使用 a和ab、ac和abc三种组合!

查看索引

查询语句

show index from 表名;

show index from 表名\G

show keys from 表名;

show keys from 表名\G

关键字解析

|--------------|-----------------------------------------------|
| Non_unique | 如果索引不能包括重复词,则为 0;反之为1 |
| Key_name | 索引的名称 |
| Seq_in_index | 索引中的列序号,从 1 开始 |
| Column_name | 列名 |
| Collation | 列以什么方式存储在索引中。在MySQL中,有值'A'(升序)或 NULL(无分类) |
| Cardinality | 索引中唯一值数目的估计值 |
| Sub_part | 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则 NULL。 |
| Packed | 关键字如何被压缩。如果没有被压缩,则为 NULL。 |
| Null | 如果列有空值,为YES。如果没有,则为NO |
| Index_type | 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE) |
| Comment | 备注 |

相关推荐
岁岁种桃花儿4 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn5 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐5 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.6 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手6 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念7 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶8 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok9 小时前
MySQL的常用数据类型
数据库·mysql
曹牧9 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty9 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存