212 - 218. MySQL索引的基本用法

news2024/11/26 7:47:46

1.索引的简介

1.1 索引的概念

是数据库对象,实现数据库快速查询

1.2 为什么使用索引

实现数据库快速查询,提高查询速度

1.3 索引的分类

a.普通索引
最基本的索引,对字段数据的类型和值没有任何限制,数据类型可以任意,字段的值可以空也可以重复

b.主键索引
给主键字段添加的索引
主键特点:非空且唯一

c.唯一索引
给唯一字段添加的索引
唯一索引和主键索引的区别:
唯一索引:只有唯一 可以有空值
主键索引:非空且唯一

d.全文索引
适用于在一大串文本添加的索引,只可以给字符串数据类型添加
字符串数据类型 ( char varchar text )

e.空间索引
给字段的数据类型只能是空间数据类型 且该字段的值必须是非空 not null
空间数据类型( geometry point linestring polygon )

f.复合索引
给多个字段添加的索引
注意:如果添加了复合索引,查询条件中只使用了第一个字段,该索引才会被触发
例如(id,name)只有查询条件中使用了id字段,索引才会被使用
如果查询条件中只有name字段,则索引不会被触发

2.创建索引

2.1 自动创建索引

如果在创建表时,给表添加了主键约束和唯一约束,MySQL数据库会自动为主键约束和唯一约束创建对应的主键索引和唯一索引

查询表中的索引
语法:show index from 表名

CREATE TABLE index_student(
	sno int(8) PRIMARY KEY auto_increment,
	sname varchar(20) UNIQUE,
	age int(2)
);
SHOW INDEX FROM index_student;

在这里插入图片描述

2.2 手动创建索引

a.创建表时创建索引

1. 创建普通索引

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
index | key [索引名] [索引类型] (字段名[(长度)] [ asc | desc ])

CREATE TABLE index_student2(
	sno int(8),
	sname VARCHAR(20),
	age int(2),
	index(sno)
);
SHOW INDEX FROM index_student2;

在这里插入图片描述

2. 唯一索引的创建

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
unique [ index | key ] [索引名] [索引类型] (字段名[(长度)] [ asc | desc ])

CREATE TABLE index_student3(
	sno int(8),
	sname VARCHAR(20),
	age int(2),
	unique index(sname)
);
3. 主键索引的创建

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
primary key [ index | key ] [索引名] [索引类型] (字段名[(长度)] [ asc | desc ])

CREATE TABLE index_student4(
	sno INT(8),
	sname VARCHAR(20),
	sex VARCHAR(1),
	PRIMARY KEY(sno)
);
SHOW INDEX FROM index_student4;
4. 全文索引的创建

注意:只能给字符串数据类型添加

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
fulltext [ index | key ] [索引名] [索引类型] (字段名[(长度)] [ asc | desc ])

CREATE TABLE index_student5(
	sno INT(8),
	sname VARCHAR(20),
	sinfo VARCHAR(100),
	FULLTEXT index(sinfo)
);
SHOW INDEX FROM index_student5;
5. 空间索引的创建

注意:只能给空间数据类型添加 且该字段的值不能为空 not null

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
spatial [ index | key ] [索引名] [索引类型] (字段名[(长度)] [ asc | desc ])

CREATE TABLE index_student6(
	sno INT(8),
	sname VARCHAR(20),
	age INT(2),
	sloc point NOT NULL,
	SPATIAL INDEX(sloc)
);
SHOW INDEX FROM index_student6;
6. 复合索引的创建

语法:creat table 表名(字段名1 字段类型1,字段名2 字段类型2,…,
index | key [索引名] [索引类型] ( 字段名1 [ (长度) ] [ asc | desc ] ,
( 字段名2 [ (长度) ] [ asc | desc ] ,…)

CREATE TABLE index_student7(
	sno int(8),
	sname VARCHAR(20),
	age int(2),
	INDEX(sno,sname)
);
SHOW INDEX FROM index_student7;

b.创建表后使用"create index"创建索引

create [ unique | fulltext | spatial ] index 索引名称 [ 索引的类型 ]
on 表名 ( 字段名1 [(长度)] [ asc | desc ] , 字段名2 [(长度)] [ asc | desc ] , … )

注意:
使用create index 这种创建索引的方式不能创建主键索引

1. 创建普通索引
CREATE TABLE index_student8(
	sno int(8),
	sname VARCHAR(20),
	age int(2)
);
CREATE INDEX index_student8_sno on index_student8(sno);
SHOW INDEX FROM index_student8;

在这里插入图片描述

2.创建唯一索引
CREATE UNIQUE INDEX index_student8_sname on index_student8(sname);
3.创建全文索引
CREATE TABLE index_student9(
	sno int(8),
	sname VARCHAR(20),
	sinfo VARCHAR(100)
);
CREATE FULLTEXT INDEX index_student9_sinfo on index_student9(sinfo);
SHOW INDEX FROM index_student9;
4.创建空间索引
CREATE TABLE index_student10(
	sno INT(8),
	sname VARCHAR(20),
	age INT(2),
	sloc point NOT NULL
);
CREATE SPATIAL INDEX index_student10_sloc ON index_student10(sloc);
SHOW INDEX FROM index_student10;
5.创建复合索引
CREATE TABLE index_student11(
	sno INT(8),
	sname VARCHAR(20),
	age INT(2)
);
CREATE INDEX index_student11_sno_sname ON index_student11(sno,sname);
SHOW INDEX FROM index_student11;

c.给已有表添加索引"alter table"

1.创建普通索引

语法:alter table 表名
add index | key [ 索引名 ] [ 索引类型 ] ( 字段名[ 长度 ] [ asc | desc ])

CREATE TABLE index_student12(
	sno int(8),
	sname VARCHAR(20),
	age INT(2)
);
ALTER TABLE index_student12 ADD INDEX(sno);
SHOW INDEX FROM index_student12;
2.创建唯一索引

语法:alter table 表名
add unique [ index | key ] [ 索引名 ] [ 索引类型 ] ( 字段名[ 长度 ] [ asc | desc ])

CREATE TABLE index_student13(
	id int(8),
	sname VARCHAR(20),
	age INT(2)
);
ALTER TABLE index_student13 ADD UNIQUE INDEX(sname);
SHOW INDEX FROM index_student13;
3.创建主键索引

语法:alter table 表名
add primary key [ index | key ] [ 索引名 ] [ 索引类型 ] ( 字段名[ 长度 ] [ asc | desc ])

CREATE TABLE index_student14(
	sno int(8),
	sname VARCHAR(20)
);
ALTER TABLE index_student14 ADD PRIMARY KEY(sno);
SHOW INDEX FROM index_student14;
4.创建全文索引

语法:alter table 表名
add fulltext [ index | key ] [ 索引名 ] [ 索引类型 ] ( 字段名[ 长度 ] [ asc | desc ])

CREATE TABLE index_student15(
	sno int(8),
	sname VARCHAR(20),
	sinfo VARCHAR(100)
);
ALTER TABLE index_student15 ADD FULLTEXT(sinfo);
SHOW INDEX FROM index_student15;
5.创建空间索引

语法:alter table 表名
add spatial [ index | key ] [ 索引名 ] [ 索引类型 ] ( 字段名[ 长度 ] [ asc | desc ])

CREATE TABLE index_student16(
	sno int(8),
	sname VARCHAR(20),
	sloc point NOT NULL
);
ALTER TABLE index_student16 add SPATIAL(sloc);
SHOW INDEX FROM index_student16;
6.创建复合索引

语法:alter table 表名
add index | key [ 索引名 ] [ 索引类型 ] ( 字段名1[ 长度 ] [ asc | desc ],字段名2[ 长度 ] [ asc | desc ],…)

CREATE TABLE index_student17(
	sno INT(8),
	sname VARCHAR(20),
	age INT(2)
);
ALTER TABLE index_student17 ADD INDEX(sno,sname);
SHOW INDEX FROM index_student17;

3.删除索引

3.1 使用alter table 删除

语法:alter table 表名 drop index | key 索引名称

ALTER TABLE index_student17 DROP INDEX sno;

3.2 使用 drop index 删除

语法:drop index 索引名称 on 表名

DROP INDEX sloc ON index_student16;

3.3 注意

使用alter table 方式删除索引不能删除主键索引
不能删除主键索引 ALTER TABLE index_student14 DROP PRIMARY KEY;
删除主键索引:
1.ALTER TABLE index_student14 DROP PRIMARY KEY;
2.使用 DROP INDEX 进行删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑技巧:Win10自带的6个实用功能,你都会用吗

目录 1、系统自带计算器 2、Win10自带截图功能 3、 Win10自带的手写输入 4、历史剪贴板 5、定时提醒 6、自带录屏功能 1、系统自带计算器 系统里自带了一个计算器大家都知道,打开是这个样子。 但当你点击计算器左上角的三个横杠图标后会发现这个计算器功能非常强大。…

Python画爱心——谁能拒绝用代码敲出来会跳动的爱心呢~

还不快把这份浪漫拿走!!节日就快到来了,给Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧,利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心,从里到外形成一个立体状,给人视觉上的冲击…

phy层深入了解编码

1,我们知道mac层通过MDI来访问phy层的,那么phy层到光模块数据是怎么处理的呢。从下面这个图中可以看出基本的关系: serdies接口说明: Medium Independent Interface (MII): 介质无关接口。提供公共接口,屏蔽多个物理…

基于haproxy负载均衡实现lamp与apache的高可用

环境准备 IP主机名服务系统192.168.47.10node1ansiblecentos8192.168.47.20node2lampcentos8192.168.47.30node3apachecentos8192.168.47.40node4haproxycentos8 基于上一篇的文章在node3主机上部署apache 一、部署haproxy 准备主机清单组织 //创建角色 [studentserver rol…

服务器没网 利用本地机器反向隧道 设置conda代理配置环境

适用情况 S是局域网内服务器,无法联网。 C为本地机器,可以通过ssh链接服务器。 本篇文章主要为了可以让S可以借用C的网络进行conda环境配置,所采取的设置。 1.利用Xshell建立反向隧道 在连接设置的ssh中点击隧道,点击设置&#…

SpringBoot--网上商城项目(前端搭建、首页、用户登录、盐加密、登录令牌管理)

文章目录 一、项目技术点 数据表 二、构建SpringBoot项目 1、创建SpringBoot项目并配置pom 配置pom 2、application.yml的配置 3、首页访问 三、首页功能 工具类!!! 首页数据绑定语法 四、用户明文登录 五、前端及数据库密码加密 …

C. String Transformation 1(图的思想)

Problem - 1384C - Codeforces 题意: 考拉有两个长度相同的字符串A和B(|A||B|n),由前20个小写英文字母组成(即从a到t)。 在一步棋中,Koa。 (选择A的某个位置子集p1,p2,...,pk(k≥1;1≤pi≤n;…

Codeforces Round #831 (Div. 1 + Div. 2)

A. Factorise NM 题目链接:Dashboard - Codeforces Round #831 (Div. 1 Div. 2) - Codeforces 样例输入: 3 7 2 75619样例输出: 2 7 47837题意:给定一个质数,让我们输出一个质数使得这两个数相加为一个合数。 分…

基于Java的飞机雷电射击游戏的设计实现(Eclipse开发)

目 录 摘 要 I Abstract II 1 引言 3 1.1 项目背景 3 1.2 电脑游戏的发展历史 3 1.3国内游戏项目研究现状 5 1.4项目主要工作 6 1.5本文组织结构 7 1.6 电脑游戏的策划 7 2 开发平台与开发技术 8 2.1 Eclipse 8 2.2 Eclipse平台 8 2.3 Java 9 2.4游戏图形界面的开发基础 11 2.5…

redis启动和简单使用

redis启动和简单使用 1.redis启动 1.1 找到redis解压的位置,在里面输入cmd回车 1.2 输入redis-server redis.conf指令,然后回车,出现如下界面 注意:该界面不能关闭了 1.3 再进入一次redis解压的位置 输入cmd回车 1.4 输入redis-cli指令后的结果 1.5 补充 当出现…

Flink系列文档-(YY05)-Flink编程API-多流算子

1 多流连接 connect connect连接(DataStream,DataStream→ConnectedStreams) connect翻译成中文意为连接,可以将两个数据类型一样也可以类型不一样DataStream连接成一个新的ConnectedStreams。需要注意的是,connect方法与union方法不同&…

Hadoop高手之路3-Hadoop集群搭建

文章目录Hadoop高手之路3-Hadoop集群搭建一、集群的规划二、再准备两台虚拟机作为服务器1. 根据hadoop001克隆出hadoop002和hadoop0032. 配置hadoop002和hadoop0031) 启动hadoop002虚拟机并登录2) 配置ip地址3) 重启网络服务器,查看ip4) 远程连接hadoop0025) 修改主…

数据库自增ID用完了会怎么样?

有主键 如果设置了主键,并且一般会把主键设置成自增。 Mysql里int类型是4个字节,如果有符号位的话就是[-231,231-1],无符号位的话最大值就是2^32-1,也就是4294967295。 创建一张表: CREATE TABLE test1 (id int(11…

人脸识别技术趋势与发展

人脸辨识 —— 引人入胜 很少有生物辨识技术能像脸部辨识那样激发我们的想象力。 同样,它的到来在 2020 年引发了深刻的担忧和令人惊讶的反应。 脸部辨识的工作原理 脸部辨识是使用脸部辨识或验证人的身份的过程。它根据人的脸部细节捕获、分析和比较模式。 人…

Restful风格的编程

Restful风格的编程1、 Restful简介2、查询用户以及用户详情2.1常用注解2.2查询用户详情3、处理创建请求3.1RequestBody注解3.1.1用途3.1.2语法规范3.2日期类型的处理3.3BindingResult4、用户信息修改与删除4.1用户信息修改4.2案例前端界面后端控制器1、 Restful简介 Restful比…

剑指offer(C++)-JZ69:跳台阶(算法-动态规划)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法&…

【JavaSE】类与对象(上)类是什么?对象是什么?

文章目录面向过程与面向对象认识类和对象创建类类的实例化内存分布注意事项总结面向过程与面向对象 我们说C语言是面向过程的编程语言,而Java是面向对象的编程语言,那究竟什么才是面向过程与面向对象呢?我们举一个例子来帮助大家理解&#x…

PX4飞行测试

文章目录前言一、首次飞行指南飞行入门解锁飞机起飞降落飞行控制/命令辅助飞行任务飞行规划任务设置机体航向设置航点/转弯半径地理围栏故障保护地理围栏地理围栏规划安全点(集结点)创建/定义安全点地形跟随/保持地形跟随地形保持前言 本节包含有关飞行(完全配置过…

虚拟主播也带货?直播电商的变与不变

5月6日晚,海外虚拟主播vox在B站开启了中国直播首秀。从最终数据来看,直播1.7小时,营收111万人民币,当晚还登上平台热门首位,这样的直播吸金能力,让不少明星都望尘莫及。 更值得关注的是,直播间…

Matlab:表达式

Matlab:表达式变量数字矩阵运算符数组运算符函数表达式示例变量 与大多数其他编程语言一样,MATLAB 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵。 MATLAB 不需要任何类型声明或维度说明。当 MATLAB …