MySQL——索引(二)创建索引(1)创建表的时候创建索引
要想使用索引提高数据表的访问速度,首先要创建一个常引。创建索引的方式有三种,具体如下。
创建表的时候可以直接创建索引,这种方式最简单、方便,其基本的语法格式如下所示:
CREATE TABLE 表名 (字段名 数据类型 [完整性约束条件],字段名 数据类型[完整性约束条件],...字段名 数据类型[UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY[别名](字段名1[(长度)][ASC|DESC]);
关于上述语法的相关解释具体如下。
(1)UNIQUE:可选参数,表示唯一索引。
(2)FULLTEXT:可选参数,表示全文索引。
(3)SPATIAL:可选参数,表示空间索引。
(4)INDEX和 KEY:用来表示字段的索引,二者选一即可。
(5)别名:可选参数,表示创建的索引的名称。
(6)字段名1:指定索引对应字段的名称。
(7)长度:可选参数,用于表示索引的长度。
(8)ASC 和 DESC:可选参数,其中,ASC 表示升序排列,DESC 表示降序排列。
为了帮助读者更好地了解如何在创建表的时候创建索引,接下来,通过具体的案例分别对 MySQL 中的6种索引类型进行讲解,具体如下:
1)创建普通索引
例如,在 t1 表中 id 字段上建立索引,SQL 语句如下:
mysql> create table t1(id INT,-> name VARCHAR(20),-> score FLOAT,-> INDEX (id)-> );
Query OK, 0 rows affected (0.03 sec)
上述 SQL语句执行后,使用 SHOW.CREATE TABLE 语句查看表的结构,结果如下所示:
mysql> show create table t1\G
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`id` int DEFAULT NULL,`name` varchar(20) DEFAULT NULL,`score` float DEFAULT NULL,KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从上述结果可以看出,id字段上已经创建了一个名称为id 的索引。为了查看索引是否被使用,可以使用 EXPLAIN 语句进行查看,SQL代码如下:
EXPLAIN SELECT * FROM t1 WHERE id=1 \G
执行结果如下所示:
mysql> EXPLAIN SELECT * FROM t1 WHERE id=1 \G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: t1partitions: NULLtype: ref
possible_keys: idkey: idkey_len: 5ref: constrows: 1filtered: 100.00Extra: NULL
1 row in set, 1 warning (0.01 sec)
从上述执行结果可以看出,possible_keys 和 key 的值都为 id,说明id 索引已经存在并且已经开始被使用了。
2)创建唯一性索引
例如,创建一个表名为 t2 的表,在表中的id 字段上建立索引名为 unique_id 的唯一性索引,并且按照升序排列,SQL语句如下:
mysql> create table t2(id INT NOT NULL,-> name VARCHAR(20) NOT NULL,-> score FLOAT,-> UNIQUE INDEX unique_id(id ASC)-> );
Query OK, 0 rows affected (0.02 sec)
上述 SQL 语句执行后,使用 SHOW CREATE TABLE 语句查看表的结构,结果如下所示:
mysql> show create table t2\G
*************************** 1. row ***************************Table: t2
Create Table: CREATE TABLE `t2` (`id` int NOT NULL,`name` varchar(20) NOT NULL,`score` float DEFAULT NULL,UNIQUE KEY `unique_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)
从上述结果可以看出,id 字段上已经建立了一个名称为 unique_id 的唯一性索引。
3)创建全文索引
例如,创建一个表名为 t3 的表,在表中的 name 字段上建立索引名为 fulltextname 的全文索引,SQL语句如下:
mysql> create table t3(id INT NOT NULL,-> name VARCHAR(20) NOT NULL,-> score FLOAT,-> FULLTEXT INDEX fulltext_name(name)-> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)
上述 SQL语句执行后,使用 SHOW CREATE TABLE 语句查看表的结构,结果如下所示:
mysql> show create table t3\G
*************************** 1. row ***************************Table: t3
Create Table: CREATE TABLE `t3` (`id` int NOT NULL,`name` varchar(20) NOT NULL,`score` float DEFAULT NULL,FULLTEXT KEY `fulltext_name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从上述结果可以看出,name字段上已经建立了一个名为 fulltext_name 的全文索引.需要注意的是,由于目前只有 MyISAM 存储引擎支持全文索引,InnoDB 存储引擎还不支持全文索引,因此,在建立全文索引时,一定要注意表存储引擎的类型,对于经常需要索引的字符串、文字数据等信息,可以考虑存储到 MyISAM 存储引擎的表中。
4)创建单列索引
例如,创建一个表名为 t4 的表,在表中的 name 字段上建立索引名为 single.name的单列索引,SQL语句如下:
mysql> create table t4(id INT NOT NULL,-> name VARCHAR(20) NOT NULL,-> score FLOAT,-> INDEX single_name(name(20))-> );
Query OK, 0 rows affected (0.01 sec)
上述 SQL语甸执行后,使用SHOW CREATE TABLE 语句登有衣的结构,结果如下所示:
mysql> show create table t4\G
*************************** 1. row ***************************Table: t4
Create Table: CREATE TABLE `t4` (`id` int NOT NULL,`name` varchar(20) NOT NULL,`score` float DEFAULT NULL,KEY `single_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从上述结果可以看出,name字段上已经建立了一个名称为 single_name 的单列索引,并且索引的长度为 20。
5)创建多列索引
例如,创建一个表名为 t5 的表,在表中的 id 和 name 字段上建立索引名为multi 的多列索引,SQL语句如下:
mysql> create table t5(id INT NOT NULL,-> name VARCHAR(20) NOT NULL,-> score FLOAT,-> INDEX multi(id,name(20))-> );
Query OK, 0 rows affected (0.02 sec)
上述 SQL语句执行后,使用 SHOW CREATE TABLE 语句查看表的结构,结果如下所示:
mysql> show create table t5\G
*************************** 1. row ***************************Table: t5
Create Table: CREATE TABLE `t5` (`id` int NOT NULL,`name` varchar(20) NOT NULL,`score` float DEFAULT NULL,KEY `multi` (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从上述结果可以看出,id 和 name 字段上已经建立了一个名为 multi 的多列索引需要注意的是,在多列索引中,只有査询条件中使用了这些字段中的第一个字段时,多列索引才会被使用。为了验证这个说法是否正确,将id字段作为查询条件,通过 EXPLAD语句查看索引的使用情况,SQL执行结果如下所示:
mysql> EXPLAIN SELECT * FROM t5 WHERE id=1 \G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: t5partitions: NULLtype: ref
possible_keys: multikey: multikey_len: 4ref: constrows: 1filtered: 100.00Extra: NULL
1 row in set, 1 warning (0.01 sec)
从上述执行结果可以看出,possible_keys 和 key 的值都为 multi,说明 multi 索引已经存在,并且已经开始被使用了。但是,如果只使用 name 字段作为查询条件,SQL 执行结果如下所示:
mysql> EXPLAIN SELECT * FROM t5 WHERE name='Mike' \G
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: t5partitions: NULLtype: ALL
possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: 1filtered: 100.00Extra: Using where
1 row in set, 1 warning (0.01 sec)
从上述执行结果可以看出,possible_keys 和 key 的值都为 NULL,说明 multi 索引还没有被使用。
6)创建空间索引
例如,创建一个表名为 t6 的表,在空间类型为 GEOMETRY 的字段上创建空间索引,SQL 语句如下:
mysql> create table t6(id INT,-> space GEOMETRY NOT NULL,-> SPATIAL INDEX sp(space)-> )ENGINE=MyISAM;
Query OK, 0 rows affected, 1 warning (0.01 sec)
上述 SQL语句执行后,使用 SHOW CREATE TABLE 语句查看表的结构,结果如下所示:
mysql> show create table t6\G
*************************** 1. row ***************************Table: t6
Create Table: CREATE TABLE `t6` (`id` int DEFAULT NULL,`space` geometry NOT NULL,SPATIAL KEY `sp` (`space`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从上述结果可以看出,t6 表中的 space 字段上已经建立了一个名称为 sp 的空间索引。需要注意的是,创建空间索引时,所在字段的值不能为空值,并且表的存储引擎为MyISAM。
相关文章:
MySQL——索引(二)创建索引(1)创建表的时候创建索引
要想使用索引提高数据表的访问速度,首先要创建一个常引。创建索引的方式有三种,具体如下。 创建表的时候可以直接创建索引,这种方式最简单、方便,其基本的语法格式如下所示: CREATE TABLE 表名 (字段名 数据类型 [完整性约束条件…...

源代码加密怎么做?企业常用十款源代码加密软件排行榜
在数字化信息时代,源代码是企业的核心资产之一。保护源代码的安全不仅能防止知识产权泄露,还能保护企业的竞争优势。因此,源代码加密成为企业信息安全的重要环节。 源代码是软件的基础,包含了企业独特的技术和解决方案。未加密的源…...

python 文件打开、读、关闭练习
一、题目要求 二、代码实现 f open("D:\\workspace\\word.txt" , "r", encoding "UTF-8")# 方案一 # content f.read() # count content.count("itheima") # print(f"itmeiha在文件中出现了:{count}次")# 方案…...
迈向大规模小目标检测:综述与数据集
为了准确检测小目标,领域内现有方法大多基于通用目标检测范式进行针对性改进,根据这些改进所采用关键技术的不同,可以分为六种类别:(1)面向样本的方法;(2)基于尺度感知的…...

69、zabbix自动、代理、snmp监控
一、zabbix 1.1、自动发现 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0 [roottest3 ~]# vim /etc/hosts 192.168.168.21 test1 192.168.168.23 test3 [roottest1 ~]# vim /etc/hosts 192.168.168.21 test1 192.168.168.23 test3 ------------…...
搜索引擎设计:如何避免大海捞针般的信息搜索
搜索引擎设计:如何避免大海捞针般的信息搜索 随着互联网的发展,信息的数量呈爆炸式增长。如何在海量信息中快速、准确地找到所需信息,成为了搜索引擎设计中的核心问题。本文将详细探讨搜索引擎的设计原理和技术,从信息获取、索引…...

设计模式- 数据源架构模式
表数据入口(Table Data Gateway) 充当数据库表访问入口的对象。一个实例处理表中所有的行。 表数据入口包含了用于访问单个表或者视图的所有SQL,如选择、插入、更新、删除等。其他代码调用它的方法来实现所有与数据库的交互。 运行机制 表数据入口包括的每个方法…...

Unity 使用字符串更改Text指定文字颜色、大小、换行、透明
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、使用字符串改变文字属性的方法(一)修改颜色(二)修改大小(三)换行(四&…...

数字信号处理2: 离散信号与系统的频谱分析
文章目录 前言一、实验目的二、实验设备三、实验内容四、实验原理五、实验步骤1.序列的离散傅里叶变换及分析2.利用共轭对称性,设计高效算法计算2个N点实序列的DFT。3.线性卷积及循环卷积的实现及二者关系分析4.比较DFT和FFT的运算时间5.利用FFT求信号频谱及分析采样…...
20240805软考架构--------每日打卡题21-25
每日打卡题21-25答案 21、【2014年真题】 难度:一般 在UML提供的系统视图中, (1) 是逻辑视图的一次执行实例,描述了并发与同步结构; (2) 是最基本的需求分析模型。 (1&a…...

GPT-5:未来已来,你准备好了吗?
GPT-5 一年半后发布?对此你有何期待? IT之家6月22日消息,在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。此外,穆…...

解决C#对Firebase数据序列化失败的难题
背景介绍 在当今的游戏开发领域,Unity与Firebase的结合日益普及。Firebase实时数据库提供了强大的数据存储和同步功能,使开发者能够轻松管理和使用数据。然而,在使用C#进行Firebase数据序列化和反序列化时,常常会遇到一些棘手的问…...
设计模式中的类关系
1. 依赖(Dependency) 定义:一个类使用到另一个类的实例,通常是通过方法参数、局部变量等。依赖关系是最弱的关系,因为它仅仅表示类之间的临时关联。 特征:在 UML 图中,依赖关系用带箭头的虚线…...

glibc的安装及MySQL的安全用户角色权限(twenty-one day)
一、glibc安装 mysql 清空/etc/目录下的my.cnf ls -l /etc/my.cnf rm -rf /etc/my.cnf yum -y remove mariadb find / -name "*mysql*" -exec rm -rf {} \; 安装mysql软件包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-li nux-glibc2.1…...

AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘. 已解决
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…...
徐州BGP机房与普通机房的区别有哪些?
BGP也被称为是边界网关协议,是运行在TCP上的一种自治系统的路由协议,能够用来处理因特网大小的网络协议,同时也是能够处理好不相关路由域之间的多路连接的协议,今天小编主要来聊一聊徐州BGP机房与普通机房之间的区别有哪些&#x…...
VBA 程序运行中禁用鼠标键盘
1. Application.Interactive False:Excel 将阻止键盘和鼠标的所有输入,但代码显示的对话框的输入不受影响。 True:打开交互模式。 下面的代码程序一旦运行就会限定在Excel的事先选定的单元格输出。 如果注释掉Application.Interactive F…...

CUDA编程从零到壹
如今,当我们谈论深度学习时,为了提高性能,我们通常会将其实现与使用 GPU 联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,它们的…...
【国产开源可视化引擎】Meta2d.js API-Utils
Utils 常用功能函数 函数 formatPadding 将 padding 转换成数组格式 [top, right, bottom, left] padding 规则与 css padding 相同 参数: padding: Padding type Padding number | string | number[]; 返回: number[] 示例: formatP…...

大模型与数据分析的融合:创新与发展的新机遇
大模型与数据分析的融合:创新与发展的新机遇 前言大模型与数据分析的融合 前言 大模型与数据分析的融合正成为推动企业发展的关键力量。大模型在数据分析领域展现出了强大的能力。它能够以接近人类的水平理解和处理自然语言,快速、准确地解析大量非结构…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...