MySQL数据库干货_20——MySQL中的索引【附有详细代码】

news/2024/11/20 11:36:11/

MySQL中的索引

索引介绍

索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。索引是一种特殊的文件,它们包含着对数据表里所有记录的位置信息。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。MySQL 索引的建立对于MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。

索引的作用

索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度)。

索引优点:

  1. 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性;
  2. 可以加快数据的检索速度;
  3. 可以加速表与表之间的连接;
  4. 在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间;

索引缺点

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
  2. 索引需要占用物理空间,数据量越大,占用空间越大;
  3. 会降低表的增删改的效率,因为每次增删改索引都需要进行动态维护;

什么时候需要创建索引

  1. 频繁作为查询条件的字段应该创建索引;
  2. 查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找);
  3. 查询中统计或者分组的字段;

什么时候不需要创建索引

  1. 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件;
  2. where条件里用不到的字段,不创建索引;
  3. 表记录太少,不需要创建索引;
  4. 经常增删改的表;
  5. 数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引;

MySQL中的索引类型

  • 普通索引:

    最基本的索引,它没有任何限制。

  • 唯一索引:

    索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一。

  • 主键索引:

    特殊的索引,唯一的标识一条记录,不能为空,一般用primary key来约束。

  • 联合索引:

    在多个字段上建立索引,能够加速查询到速度。

普通索引

是最基本的索引,它没有任何限制。在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。

创建索引时需要注意:


如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。

查询索引
SHOW INDEX FROM tableName;
直接创建索引
CREATE INDEX indexName ON table(columnName(length));

示例:

为 emp3 表中的 name 创建一个索引,索引名为 emp3_name_index;

create index emp3_name_index ON emp3(name);
修改表添加索引
ALTER TABLE tablename ADD INDEX index_name (columnName(length));

示例:

修改 emp3 表,为 addrees 列添加索引,索引名为 emp3_address_index;

alter table emp3 add index emp3_address_index(address);
创建表时指定索引列
CREATE TABLE table (
COLUMNName TYPE ,
PRIMARY KEY (id),
INDEX index_name (column(length))
);

示例:

创建 emp4 表,包含 emp_id,name,address 列, 同时为 name 列创建索引 ,索引名为 emp4_name_index。

create table  emp4(emp_id int primary key auto_increment,name varchar(30),address varchar(50),index emp4_name_index(name));
删除索引
DROP INDEX indexname ON tablename;

示例:

删除 mep3 表中索引名为 emp3_address_index 的索引。

drop index emp3_address_index on emp3;

唯一索引

唯一索引与普通索引类似,不同的就是: 索引列的值必须唯一,但允许有空值。

创建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length));

示例:

为 emp 表中的 name 创建一个唯一索引,索引名为 emp_name_index。

create unique index emp_name_index on emp(name);
修改表添加唯一索引
ALTER TABLE table_name ADD UNIQUE indexName (column(length));

示例:

修改 emp 表,为 salary 列添加唯一索引,索引名为 emp_salary_index。

alter table emp add unique emp_salary_index(salary);
创建表时指定唯一索引
CREATE TABLE `table` (
COLUMN TYPE ,
PRIMARY KEY (`id`),
UNIQUE index_name (column(length))
);

示例:

创建 emp5 表,包含 emp_id,name,address 列,同时为 name 列创建唯一索引。索引名为 emp5_name_index。

create table emp5(emp_id int primary key ,name varchar(30),address varchar(30),unique emp5_name_index(name));

主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

修改表添加主键索引
ALTER TABLE  表名 ADD PRIMARY KEY(列名);

示例:

修改 emp 表为 employee_id 添加主键索引。

alter table emp add primary key(employee_id);
创建表时指定主键索引
CREATE TABLE `table` (
COLUMN TYPE ,
PRIMARY KEY(column)
);

示例:

创建 emp6 表,包含 emp_id,name,address 列,同时为 emp_id 列创建主键索引。

create table emp6(employee_id int primary key auto_increment,name varchar(20),address varchar(50));

组合索引

组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)。

最左前缀原则

就是最左优先。

如: 我们使用表中的 name ,address ,salary 创建组合索引,那么想要组合索引生效, 我们只能使用如下组合:

name/address/salary

name/address

name/

如果使用 addrees/salary 或者是 salary 则索引不会生效。

添加组合索引
ALTER TABLE tablename ADD INDEX index_name (column(length),column(length));

示例:

修改 emp6 表,为 name ,address 列创建组合索引。

alter table emp6 add index emp6_index_n_a(name,address);
创建表时创建组合索引
CREATE TABLE `table` (
COLUMN TYPE ,
INDEX index_name (column(length),column(length))
);

示例:

创建 emp7 表,包含 emp_id,name,address 列,同时为 name,address 列创建组合索引。

create table emp7(emp_id int primary key auto_increment ,name varchar(20),address varchar(30),index emp7_index_n_a(name,address));

http://www.ppmy.cn/news/1198033.html

相关文章

SSTI模板注入入门

一.关系:子类->父类 class A:passclass B(A):passclass C(B):passclass D(B):passcC() 1.__class__查看当前类 c:当前类 print(c.__class__) 2.__base__查看当前类的父类 print(c.__class__.__base__) c的父类的父类 print(c.__class__.__base_…

FaceChain开源虚拟试衣功能,打造更便捷高效的试衣新体验

简介 虚拟试衣这个话题由来已久,电商行业兴起后,就有相关的研发讨论。由其所见即所得的属性,它可以进一步提升用户服装购买体验。它既可以为商家做商品展示服务,也可以为买家做上身体验服务,这让同时具备了 B 和 C 的两…

Web3游戏的十字路口:沿用传统IP还是另起炉灶?

人们经常问我对 Web3 游戏有什么看法。因此,我想以书面形式概述一下我目前的想法。 让我先澄清一下:我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究,这反映我在游戏领域关注…

Technology strategy Pattern 学习笔记3-Creating the Strategy-Industry context

Creating the Strategy-Industry context 1 SWOT 1.1 create steps 1.与内部各方沟通 了解企业的人、流程和技术,包括与其它企业的不同了解哪些创新可以做竞争者及市场信息企业可以支撑的类似业务 按SWOT四象限分类,先做列表后放入象限 1.2 四象限…

什么是低代码平台:低代码平台介绍

在谈低代码平台前,我们看一个软件开发过程中的一个重要概念:组件,也叫构件。 这个构件有以下特点, 可组装,构件有对外的公共接口,构件对外的交互就是通过定义的公共接口进行的; 可部署&#xff…

Nacos-2.2.2源码修改集成高斯数据库GaussDB,postresql

一 ,下载代码 Release 2.2.2 (Apr 11, 2023) alibaba/nacos GitHub 二, 执行打包 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.skiptrue clean install -U 或 mvn -Prelease-nacos ‘-Dmaven.test.skiptrue’ ‘-Drat.skiptrue’ clean instal…

redis数据库缓存服务器

redis比mysql访问数据快 非关系型数据库以键值对的方式存储数据 作用:加快访问速度,缓解数据库压力 redis最新版本7 特点 丰富的数据结构 list,set,hash等数据结构的存储 支持持久化 支持事务 “一个完整的动作,要么全部执行&#xff0…

1.如何实现统一的API前缀-web组件篇

文章目录 1. 问题的由来2.实现原理3. 总结 1. 问题的由来 系统提供了 2 种类型的用户,分别满足对应的管理后台、用户 App 场景。 两种场景的前缀不同,分别为/admin-api/和/app-api/,都写在一个controller里面,显然比较混乱。分开…