当前位置: 首页 > news >正文

【MySQL进阶之路 | 高级篇】索引的声明与使用

1. 索引的分类

MySQL的索引包括普通索引,唯一性索引,全文索引,单列索引和空间索引.

  • 从功能逻辑上说,索引主要分为普通索引,唯一索引,主键索引和全文索引.
  • 按物理实现方式,索引可以分为聚簇索引和二级索引.
  • 按作用字段个数进行划分,分为单列索引和联合索引.

(1). 普通索引

在创建普通索引时,不附加任何限制条件,只是用于提高查询速度.这类索引可以创建在任何数据类型上,其值是否唯一或非空,要由字段本身的完整性约束条件决定.建立索引后,可以通过索引进行查询.

(2). 唯一索引

使用UNIQUE参数可以设置唯一索引,在建立唯一索引时,限制该索引的值必须是唯一的.但允许是空值.在一张表里可以有多个唯一索引.

(3). 主键索引

主键索引是一种特殊的唯一性索引.在唯一约束的基础上添加了非空的约束,一张表里只能有一个主键索引.这是由主键索引的物理实现方式决定的.因为数据存储在文件中只能按照一种顺序进行存储.

(4). 联合索引

联合索引是在表的多个字段上创建一个索引,该索引指向创建的多个字段.可以通过几个字段进行查询,但查询条件中使用这些字段的第一个字段时才会被使用.使用联合索引时遵循最左前缀原则.

(5). 全文索引

使用参数FULLTEXT可以设置索引为全文索引.在定义索引的列上支持值的全文查找,允许在这些索引列中插入空值和重复值.全文索引只能创建在CHAR, VARCHAR, TEXT类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度.

(6). 小结

  • InnoDB : 支持b+树,full-text等索引,不支持hash索引.
  • MyISAM : 支持b+树,full-text等索引,不支持hash索引.
  • Memory : 支持b+树,hash索引等,不支持b+树.

2. 创建索引

MySQL支持多种方法在单个或多个列上创建索引,在创建表的定义语句中CREATE TABLE中指定索引列,使用ALTER TABLE语句在已经创建的表中创建索引,或者使用CREATE INDEX语句在已经存在的表中添加索引.

(1). 创建表时添加索引

CREATE TABLE demo1(
demo1_id INT PRIMARY KEY AUTO_INCREMENT,
demo_fname VARCHAR(15) UNIQUE KEY,
demp_lname VARCHAR(20),
INDEX demo1_index_lname(demp_lname)
);
  • 隐式的方式创建索引.在声明有主键约束,唯一性约束,外键约束的字段上,会自动的添加相关的索引.
  • 显式的方式创建普通索引.
  • 我们可以通过show index from 表名的方式来查看表中的索引.
  • 我们只能在创建表时通过定义主键约束的方式隐式定义主键约束.

(2). 创建表后添加索引

1). ALTER TABLE ... ADD...

CREATE TABLE demo2(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
books VARCHAR(20)
);ALTER TABLE demo2 ADD INDEX demo2_index_books(books);ALTER TABLE demo2 ADD UNIQUE KEY demo2_uq_name(name);show index from demo2;

4b3b5ff9183c45c2bc737a25ac78f4be.png

2). CREATE INDEX ... ON ...

CREATE TABLE demo3(
id INT PRIMARY KEY,
fname VARCHAR(20),
lname VARCHAR(20)
);CREATE INDEX demo3_index_fname ON demo3(fname);CREATE UNIQUE INDEX demo3_uq_lname ON demo3(lname);show index from demo3;

23883850d96547419d43751f0ca56c0f.png

3. 删除索引

(1). 方式1 : ALTER TABLE ... DROP

ALTER TABLE demo3 DROP INDEX demo3_index_fname;show index from demo3;

d77b64562e4b46ea91d6872f6f6a82b3.png

(2). 方式2 : DROP INDEX ... ON ...

DROP INDEX demo3_uq_lname ON demo3;

ae8afe4fbac54eb998dab6fe16bb39b5.png

注意 : 添加了AUTO_INCREMENT自增约束的列的索引是不可以被删除的.因为自增约束依赖于主键约束或唯一键约束.删除了列的索引,其约束也跟着被删除了.AUTO_INCREMENT失去了依赖的主键/唯一键约束,即会报错.

 

http://www.lryc.cn/news/383026.html

相关文章:

  • 探索Java中的设计模式:从单例到工厂模式
  • 表单(forms)
  • Geoserver源码解读四 REST服务
  • 硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能
  • 【AI大模型】GPTS 与 Assistants API
  • 攻击者开始使用 XLL 文件进行攻击
  • Why RAG is slower than LLM?
  • Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码
  • 汽车汽配图纸管理、产品研发管理解决方案
  • 小程序简单版音乐播放器
  • 驾校预约管理系统
  • C++ 左值右值 || std::move() || 浅拷贝,深拷贝 || 数据类型
  • 发那科机器人IO 分配
  • ubuntu开机怎么进入、退出命令行界面
  • 『FPGA通信接口』LVDS接口(4)LVDS接收端设计
  • 面试题:HTTP的body是二进制还是文本
  • 5分钟带你部署一套Jenkins持续集成环境​
  • OpenAI突然宣布停止向中国提供API服务!
  • Bootstrap 标签
  • EtherCAT主站SOEM -- 37 -- win-soem-win10及win11系统QT-SOEM-1个电机转圈圈-周期同步速度模式(CSV模式)
  • 老板舍不得买库存管理软件❓一招解决
  • 【MySQL数据库】:MySQL视图特性
  • malloc、free和new delete的区别
  • 如何有效地优化 Erlang 程序的内存使用,以应对大规模数据处理的需求?
  • vue3项目使用@antv/g6实现可视化流程功能
  • 【Linux网络(一)初识计算机网络】
  • Vulhub——Log4j、solr
  • linux 设置程序自启动
  • PostgreSQL 分区表与并行查询(十)
  • React Hooks使用规则:为什么不在条件语句和循环中使用它们