侧边栏壁纸
博主头像
Epoch

Java开发、Python爬虫、微服务、分布式、前端

  • 累计撰写 93 篇文章
  • 累计创建 110 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

MySQL 索引

Epoch
2021-09-20 / 0 评论 / 0 点赞 / 450 阅读 / 1,167 字 / 正在检测是否收录...

MySQL 索引

1.1 什么是索引

​ 在数据库表中,对字段建立索引可以大大提高查询速度。通过善用这些索引,可以令MySQL的查询和运行更加高效。

​ 如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 一个人力三轮车。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目 录(索引)快速查找到需要的字

1.2 常见索引分类

索引名称 说明
主键索引 (primary key) 主键是一种唯一性索引,每个表只能有一个主键, 用于标识数据表中的每一 条记录
唯一索引 (unique) 唯一索引指的是 索引列的所有值都只能出现一次, 必须唯一.
普通索引 (index) 最常见的索引,作用就是 加快对数据的访问速度

MySql将一个表的索引都保存在同一个索引文件中, 如果对中数据进行增删改操作,MySql都会自动的更 新索引.

image-20210920224517306

1.2.1 主键索引 (PRIMARY KEY)

特点: 主键是一种唯一性索引,每个表只能有一个主键,用于标识数据表中的某一条记录。

一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。

1) 创建db_index数据库

CREATE DATABASE db_index CHARACTER SET utf8;

2) 创建 demo01表

CREATE TABLE demo01(
    did INT,
    dname VARCHAR(20),
    hobby VARCHAR(30)
);

3) 语法格式

  • 创建表的时候直接添加主键索引 (最常用)
CREATE TABLE 表名(
-- 添加主键 (主键是唯一性索引,不能为null,不能重复,) 字段名 类型 PRIMARY KEY,
);
  • 修改表结构 添加主键索引
ALTER TABLE 表名 ADD PRIMARY KEY ( 列名 )

4) 为demo1 表添加主键索引

ALTER TABLE demo01 ADD PRIMARY KEY (did);

image-20210920224955244

1.2.2 唯一索引(UNIQUE)

特点: 索引列的所有值都只能出现一次, 必须唯一.

唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了

提高访问速度,而只是为了避免数据出现重复。

1) 语法格式

  • 创建表的时候直接添加主键索引
CREATE TABLE 表名( 
  	列名 类型(长度),
		-- 添加唯一索引
		UNIQUE [索引名称] (列名) 
);
  • 使用create语句创建: 在已有的表上创建索引
create unique index 索引名 on 表名(列名(长度))

修改表结构添加索引

ALTER TABLE 表名 ADD UNIQUE ( 列名 )

2) 为 hobby字段添加唯一索引

create unique index ind_hobby on demo01(hobby)

image-20210920225544245

3) 向表中插入数据

INSERT INTO demo01 VALUES(1,'张三','DBJ');

# 报错Duplicate entry 'DBJ' for key 'hobby' 
# 唯一索引保证了数据的唯一性,索引的效率也提升了 
INSERT INTO demo01 VALUES(2,'李四','DBJ');

image-20210920225631256

1.2.3 普通索引 (INDEX)

普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDERBY column)中的数据列创建 索引。

1) 语法格式

使用create index 语句创建: 在已有的表上创建索引

create index 索引名 on 表名(列名[长度])

修改表结构添加索引

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

2) 给 dname字段添加索引

# 给dname字段添加索引
alter table demo01 add index dname_indx(dname);

image-20210920225908906

1.2.4 删除索引

  • 由于索引会占用一定的磁盘空间,因此,为了避免影响数据库的性能,应该及时删除不再使用的索引

1) 语法格式

ALTER  TABLE  table_name   DROP  INDEX  index_name;

2) 删除 demo01 表中名为 dname_indx 的普通索引。

ALTER TABLE demo01 DROP INDEX dname_indx;

1.3 索引的优缺点总结

  • 添加索引首先应考虑在 where 及 order by 涉及的列上建立索引。

  • 索引的优点

    1. 大大的提高查询速度

    2. 可以显著的减少查询中分组和排序的时间。

  • 索引的缺点

    1. 创建索引和维护索引需要时间,而且数据量越大时间越长

    2. 当对表中的数据进行增加,修改,删除的时候,索引也要同时进行维护,降低了数据的维护

    速度

0

评论区