MYSQL-索引的介绍及使用

本文深入解析MySQL中的索引概念,包括主键索引、唯一索引、常规索引及全文索引的创建与使用方法,同时探讨了索引管理与优化原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引

mysql官方对索引的定义为:索引(Index)是帮助MYSQL高效获取数据的数据结构。
提取句子主干,就可以得到索引的本质,索引是数据结构。

对于索引,我们理解成目录都可以,就像一本书的目录,当我们需要查找书中某个数据时,如果对书本不了解,我们直接找肯定会很费劲,但是如果我们先找目录,查找的速度就会提高,我们理解索引就可以这样理解。

索引的分类

  • 主键索引(primary key)
    • 唯一的标识,该列中的任意一个数据都是唯一的,一张表只能有一个主键。
  • 唯一索引(unique)
    • 也是唯一的标识,表明该列中的任意一个数据都是唯一的,一张表中允许存在多个唯一索引。
  • 常规索引(key/index)
    • 默认的索引,可以用key或者index关键字设置。
  • 全文索引(FullText)
    • 在特定的数据库引擎下才有,比如MYISAM
    • 它能快速定位数据

索引的使用

显示某张表所有的索引

show index from 表名;

增加一个索引

  • 主键索引
-- 方式1:
CREATE TABLE `user`( 
 `id` INT COMMENT '主键id', 
 `name` VARCHAR(30) COMMENT '用户名', 
 `sex` ENUM('男','女') COMMENT '性别', 
 `phone` VARCHAR(15) COMMENT '电话号', 
 `brief` TEXT COMMENT '简介', 
 `birthday` DATE COMMENT '生日',
 PRIMARY KEY(`id`)	-- 建表时将id列添加为主键
 -- PRIMARY KEY(列名) 
) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci;

-- 方式2:
ALTER TABLE 表名 ADD PRIMARY KEY (指定字段);
  • 唯一索引
-- 方式1:
CREATE TABLE `user`( 
 `id` INT COMMENT '主键id', 
 `name` VARCHAR(30) COMMENT '用户名', 
 `sex` ENUM('男','女') COMMENT '性别', 
 `phone` VARCHAR(15) COMMENT '电话号', 
 `brief` TEXT COMMENT '简介', 
 `birthday` DATE COMMENT '生日',
 UNIQUE phone_key(`phone`)	-- 建表时为phone列添加名为phone_key的唯一索引
 -- UNIQUE 索引名(列名) 可以不指定索引名 不指定时默认为列名
) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci;

-- 方式2:
ALTER TABLE 表名 ADD UNIQUE INDEX 索引名(列名); --可省略索引名

-- 方式3:
CREATE UNIQUE INDEX 索引名 ON 表名(列名);   --不可省略索引名
  • 常规索引
-- 方式1:
CREATE TABLE `user`( 
 `id` INT COMMENT '主键id', 
 `name` VARCHAR(30) COMMENT '用户名', 
 `sex` ENUM('男','女') COMMENT '性别', 
 `phone` VARCHAR(15) COMMENT '电话号', 
 `brief` TEXT COMMENT '简介', 
 `birthday` DATE COMMENT '生日',
 KEY name_key(`name`)	-- 建表时为name列添加名为name_key的普通索引
 -- KEY 索引名(列名) 可以不指定索引名 不指定时默认为列名
) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci;

-- 方式2:
ALTER TABLE 表名 ADD INDEX 索引名(列名);  --可省略索引名

-- 方式3:
CREATE INDEX 索引名 ON 表名(列名);  --不可省略索引名
  • 全文索引
-- 方式2:
CREATE TABLE `user`( 
 `id` INT COMMENT '主键id', 
 `name` VARCHAR(30) COMMENT '用户名', 
 `sex` ENUM('男','女') COMMENT '性别', 
 `phone` VARCHAR(15) COMMENT '电话号', 
 `brief` TEXT COMMENT '简介', 
 `birthday` DATE COMMENT '生日', 
 FULLTEXT brief_key(`brief`)	-- 建表时为brief列添加名为brief_key的全文索引
 -- FULLTEXT 索引名(列名) 可以不指定索引名 不指定时默认为列名
) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci;

--方式2:
ALTER TABLE 表名 ADD FULLTEXT 索引名(列名);  --可省略索引名

--方式3:
CREATE FULLTEXT INDEX 索引名 ON 表名(列名);  --不可省略索引名

注意:全文索引的使用,要看当前数据引擎是否支持哦!


删除索引

  • 主键索引
ALTER TABLE 表名 DROP PRIMARY KEY; 
  • 唯一索引
ALTER TABLE 表名 DROP INDEX 索引名; 
  • 常规索引
ALTER TABLE 表名 DROP INDEX 索引名;
  • 全文索引
ALTER TABLE 表名 DROP INDEX 索引名;

我们发现除了主键删除比较特殊以外,其他的索引删除均使用通过索引名删除的方法。(当然可能还有其他删除方式,只是博主还未get到,欢迎各位大佬在评论区指教)


索引的原则

  • 索引不是越多越好:索引也是占内存的,过多的索引会影响数据库的效率。
  • 不要对经常变动的数据加索引:对索引列添加数据时,数据库会更新它的索引文件,也会影响效率。
  • 小数据量的表不需要加索引:索引本身就占空间,对于数据量少的数据,可以避免索引以降低数据表的复杂度。
  • 索引一般加在常用于查询的字段上:索引本身的作用就是为了能够快速检索数据,在常用于查询的字段上添加索引,可以大大提高检索的效率。

索引虽好,但是也不能乱用和滥用,用的恰当对整个系统的运行有着很好的效果,用的不好,也会无意降低系统的性能,我们的开发更应该从实际角度出发去考虑任何问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值