MySQL面经【索引】

索引是什么

索引相当于一本书的目录,通过目录可以快速地找到对应的资源。 添加索引是给某一个字段,或者某些字段添加索引。

索引的种类

  • 主键索引(PRIMARY) 数据列不允许重复,不允许为NULL,⼀个表只能有⼀个主键。
  • 唯⼀索引(UNIQUE) 数据列不允许重复,允许为NULL值,⼀个表允许多个列创建唯⼀索引。

可以通过 ALTER TABLE table_name ADD UNIQUE (column);

创建唯⼀索引 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2);

  • 普通索引(INDEX)

可以通过 ALTER TABLE table_name ADD INDEX index_name (column); 创建普通索引

可以通过 ALTER TABLE table_name ADD INDEX index_name(column1,column2,column3); 创建组合索引

全⽂索引(FULLTEXT)

  • 可以通过 ALTER TABLE table_name ADD FULLTEXT (column); 创建全⽂索引

索引的特点

  1. 索引加快数据库的检索速度
  2. 索引降低了插⼊、删除、修改等维护任务的速度
  3. 唯⼀索引可以确保每⼀⾏数据的唯⼀性
  4. 通过使⽤索引,可以在查询的过程中使⽤优化隐藏器,提⾼系统的性能 索引需要占物理和数据空间

索引并⾮是越多越好,创建索引也需要耗费资源,

⼀是额外占用了数据库的存储空间

⼆是在插⼊和删除时要花费较多的时间维护索引

创建索引的三种方式

  1. 创建表时创建索引

在执⾏CREATE TABLE时创建索引

java 复制代码
CREATE TABLE user_index2 (
id INT auto_increment PRIMARY KEY,
first_name VARCHAR (16),
last_name VARCHAR (16),
id_card VARCHAR (18),
information text,
KEY name (first_name, last_name),
FULLTEXT KEY (information),
UNIQUE KEY (id_card)
);
  1. 使⽤ALTER TABLE命令去增加索引
java 复制代码
 ALTER TABLE table_name ADD INDEX index_name (column_list);

ALTER TABLE⽤来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

其中table_name是要增加索引的表名,column_list指出对哪些列进⾏索引,多列时各列之间⽤逗号分隔。 索引名index_name可⾃⼰命名,缺省时,MySQL将根据第⼀个索引列赋⼀个名称。另外,ALTER TABLE允许在单个语句中更改多 个表,因此可以在同时创建多个索引。

java 复制代码
ALTER TABLE table_name ADD INDEX index_name (column_list);
  1. 使⽤CREATE INDEX命令创建
java 复制代码
   CREATE INDEX index_name ON table_name (column_list);

CREATE INDEX可对表增加普通索引或UNIQUE索引。(但是,不能创建PRIMARY KEY索引)

删除索引

根据索引名删除普通索引、唯⼀索引、全⽂索引:

alter table 表名 drop KEY 索引名

java 复制代码
alter table user_index drop KEY name;
alter table user_index drop KEY id_card;
alter table user_index drop KEY information;

删除主键索引: alter table 表名 drop primary key (因为主键只有⼀个)。

java 复制代码
   alter table user_index drop primary key

这⾥值得注意的是, 如果主键⾃增长,那么不能直接执⾏此操作(⾃增长依赖于主键索引):

java 复制代码
alter table user_index
-- 重新定义字段
MODIFY id int,
drop PRIMARY KEY

但通常不会删除主键,因为设计主键⼀定与业务逻辑⽆关。

相关推荐
m0_613856294 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7944 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1375 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库5 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下5 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610265 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
Elastic 中国社区官方博客6 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官6 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者6 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
大迪deblog6 小时前
系统架构师-数据库-数据库设计
数据库·oracle·系统架构