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

MySQL数据库之索引

目录

一、索引的概念

二、索引的作用

三、索引的副作用

四、创建索引的规则

1、适合创建为索引的字段的规则

2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合

五、索引的分类和创建

1、索引的分类

2、三种创建方式

3、索引的创建演示

1、创建普通索引

(1)直接创建索引

 (2)通过修改表结构创建索引

(3)通过创建表的方法创建普通索引

2、唯一索引

(1)直接创建唯一索引

(2)创建表的时候创建唯一索引

(3)通过修改表结构创建唯一索引

3、主键索引

(1)创建主键索引

(2)通过修改表结构添加主键索引

4、组合索引

 (1)创建组合索引

5、全文索引 

(1)创建表的时候创建全文索引

(2)直接创建全文索引

(3)修改表结构方式创建

6、查看索引

方法一

 方法二

7、删除索引

方法一:直接删除

方法二:通过修改表的方式删除索引

 方法三:删除主键索引


一、索引的概念

索引是一个排序的列表,再这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。

使用索引进行操作和使用select等语句直接进行查询的区别:使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址直接访问相应的数据,因此能加快数据库的查询速度。但是其他操作语句需要扫描全表后再进行相应操作。

总结:索引就是一种帮助系统能更快速的查询信息的结构,可以通过物理地址直接进行查找,而不需要扫描全表再进行操作。

二、索引的作用

(1)设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建           索引的最主要的原因。

(2)当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。

(3)可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。

(4)通过创建唯一(键)性索引,可以保证数据表中每一行数据的唯一性。

(5)可以加快表与表之间的连接。

(6)在使用分组和排序时,可大大减少分组和排序的时间。

三、索引的副作用

(1)索引需要占用额外的磁盘空间

        对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。
而 InnoDB 引擎的表数据文件本身就是索引文件。

(2)在插入和修改数据时要花费更多的时间,因为索引也要随之变动

四、创建索引的规则

1、适合创建为索引的字段的规则


索引虽可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。

(1)表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是子表的主键,查询时可以快速定位

(2)记录数超过300行的表应该有索引。如果没有索引,需要把表遍历一遍,会严重影响数据库的性能。

(3)经常与其他表进行连接的表,在连接字段上应该建立索引。

(4)唯一性太差的字段不适合建立索引。

(5)更新太频繁地字段不适合创建索引。

(6)经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
select name,score from ky19 where id=1

(7)索引应该建在选择性高的字段上。

(8)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
id type score zhusang(txt)  page  blog

2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合

(1)小字段

(2)唯一性强的字段

(3)更新不频繁,但查询率很高的字段

(4)表记录超过300+行

(5)主键、外键、唯一键

五、索引的分类和创建

1、索引的分类


(1)普通索引

针对所有字段,没有特殊的需求和规则

(2)唯一索引

针对唯一的字段,仅允许出现一次空值

(3)组合索引

以 多列/多字段 组合的形式的索引,按照排序的顺序,否则无效

(4)主键索引

针对唯一字段,且不可为空,同时一张表只允许包含一个主键索引

(5)全文索引

varchar char text blog clob 以这些字段检索内部信息来做字段的索引

2、三种创建方式

(1)创建索引并且指向索引的字段

(2)alter修改表结构的时候添加add 添加index

(3)创建表的时直接创建索引

ps:主键索引--->直接创建主键即可

3、索引的创建演示

1、创建普通索引

(1)直接创建索引
格式:
CREATE INDEX 索引名 ON 表名 (列名[(length)]);示例:
create index phone_index on yyy (phone);#(列名(length)):length是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length 个字符来创建索引,这样有利于减小索引文件的大小。
#索引名建议以“_index”结尾,可以自定义。

 (2)通过修改表结构创建索引
格式:
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));示例:
create table test(id int(4) not null,name varchar(10) not null,cardid varchar(18) not null,index id_index (id));
show create table test;    #查看表结构

(3)通过创建表的方法创建普通索引
格式:
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));示例:
create table test(id int(4) not null,name varchar(10) not null,cardid varchar(18) not null,index id_index (id));
show create table test;

2、唯一索引

(1)直接创建唯一索引
格式:
CREATE UNIQUE INDEX 索引名 ON 表名(列名);示例:
create unique index address_index on yyy (address);
create unique index name_index on yyy (name);                        
show create table yyy;

(2)创建表的时候创建唯一索引
格式:
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...],UNIQUE 索引名 (列名));示例:
create table amd2 (id int,name varchar(20),unique id_index (id));
show creat table amd2;

(3)通过修改表结构创建唯一索引
格式:
ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);示例:
alter table yyy add unique cardid_index (cardid);

3、主键索引

(1)创建主键索引
格式:
CREATE TABLE 表名 ([...],PRIMARY KEY (列名));示例:
create table test1 (id int primary key,name varchar(20));
create table test2 (id int,name varchar(20),primary key (id));
show create table test1;
show create table test2;

(2)通过修改表结构添加主键索引
格式:
ALTER TABLE 表名 ADD PRIMARY KEY (列名); 示例:
alter table yyy add primary key(name);

4、组合索引

 (1)创建组合索引
格式:
CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));示例:
create table amd1 (id int not null,name varchar(20),cardid varchar(20),index index_amd (id,name));
show create table amd1;
insert into amd1 values(1,'zhangsan','123123');
insert into amd1 values(1,'zhangsan','123123');

5、全文索引 

(1)创建表的时候创建全文索引
格式:
CREATE TABLE 表名 (字段1 数据类型[,...],FULLTEXT 索引名 (列名)); 示例:
create table auth2.test14(uid int(5) not null.uname char(5) not null,major char(10) not null,grade int(2) not null,score decimal(5,2) not null,addition char(10) default '无',fulltext index fen(uname),primary key(uid));

(2)直接创建全文索引
格式:
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);示例:
create fulltext index remark_index on member (remark);

(3)修改表结构方式创建
格式:
ALTER TABLE 表名 ADD FULLTEXT 索引名 (列名);示例:
alter table ky30 add fulltext xingming(name);

6、查看索引

方法一
格式:
show index from 表名;
show index from 表名\G;    #竖向显示表索引信息示例:
show index from yyy;
show index from yyy\G;    #竖向显示表索引信息
 方法二
格式:
show keys from 表名;
show keys from\G 表名;    #竖向显示索引信息示例:
show keys from yyy;
show keys from yyy\G;    #竖向显示索引信息

7、删除索引

方法一:直接删除
格式:
DROP INDEX 索引名 ON 表名;示例:
drop index name_index on member;
方法二:通过修改表的方式删除索引
格式:
ALTER TABLE 表名 DROP INDEX 索引名;示例:
alter table member drop index id_index;
show index from member;
 方法三:删除主键索引
格式:
ALTER TABLE 表名 DROP PRIMARY KEY;示例:
alter table yyy drop primary key;

相关文章:

MySQL数据库之索引

目录 一、索引的概念 二、索引的作用 三、索引的副作用 四、创建索引的规则 1、适合创建为索引的字段的规则 2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合 五、索引的分类和创建 1、索引的分类 2、三种创建方式 3、索引的创建演示 1、创建普通索…...

OpenCV(四):Mat支持的运算

目录 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 2.Mat类支持逻辑与、或、非等逻辑运算, 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 加法:Mat Mat,保存到 resul…...

WebRTC音视频通话-WebRTC推拉流过程中日志log输出

WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流:https://blog.csdn.net/gloryFlow/article/details/132262724 拉流:https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的…...

用Jmeter压测问题解决

最近做一个基于duboo服务的接口,需要进行稳定性测试。但是用Jmeter GUI 方式跑只能持续2个小时左右,Jmeter就崩溃了,日志报错:out of memory 解决方法如下: 直接运行jmeter的java包试试: 1、打开jmeter.…...

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…...

问道管理:成交量买卖公式?

跟着股票商场的如火如荼,人们对于怎么解读和使用成交量进行股票生意的需求日积月累。成交量是指在某一特定时间内进行的股票生意的数量,它是投资者们研判商场状况和制定生意战略的重要指标之一。那么,是否存在一种最厉害的成交量生意公式呢&a…...

【MySQL】5、MySQL高阶语句

一、常用查询(增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 模板表: 数据库有一张info表,记录了学生…...

【Linux】redhat7.8配置yum在线源【redhat7.8镜像容器内配置yum在线源】通用

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

强大的处理器和接口支持BL304ARM控制器

在智慧医疗领域,BL304可以用于实现医疗设备的智能化、远程监控和数据交换。在智慧电力领域,BL304可以帮助实现电网的智能化管理,提升电力供应的效率。在智慧安防领域,BL304可以实现智能监控、智能门锁等应用,保障安全。…...

react 基础知识(一)

1、 安装1 (版本 react 18) // 安装全局脚手架(create-react-app基于webpackes6) npm install -g create-react-app //使用脚手架搭建项目 create-react-app my-app // 打开目录 cd my-app // 运行项目 npm start2、初体验 impo…...

SpringBoot整合JUnit、MyBatis、SSM

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…...

virtuoso61x中集成calibre

以virtuoso618为例,在搭建完电路、完成前仿工作之后绘制版图,版图绘制完成之后需要进行drc和lvs【仅对于学校内部通常的模拟后端流程而言】,一般采用mentor的calibre来完成drc和lvs。 服务器上安装有virtuoso和calibre,但是打开la…...

com.google.guava:guava 组件安全漏洞及健康分析

组件简介 维护者google组织许可证类型Apache-2.0首次发布2010 年 4 月 26 日最新发布时间2023 年 8 月 1 日GitHub Star48189GitHub Fork10716依赖包28,694依赖存储库219,576 Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如 multimap 和…...

Hadoop服务脚本

#!/bin/bash process("NameNode" "SecondaryNameNode" "DataNode" "NodeManager" "ResourceManager") JAVA_HOME"/opt/software/jdk1.8.0_371" HADOOP_HOME"/opt/software/hadoop-3.3.6"# 定义颜色的AN…...

[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口

需求&#xff1a;speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时&#xff0c;忘记关闭就经常很多窗口&#xff0c;强迫症&#xff0c;从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…...

数据库(二) Oracle篇

Oracle SQL常用函数 概述 SQL函数有单行函数和多行函数,其区别为&#xff1a; 单行&#xff1a;输入一行,返回一行,如字符、数字、转换、通用函数等多行&#xff1a;输入多行,返回一行,也称为分组函数、组函数、聚合函数,且多行函数会自动滤空 单行函数 字符函数 CONCAT(…...

TDengine函数大全-目录

TDengine函数大全 详情见具体页面&#xff0c;点击进入。 1.数学函数 ABSACOSASINATANCEILCOSFLOORLOGPOWROUNDSINSQRTTAN 2.字符串函数 CHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMRTRIMSUBSTRUPPER 3.转换函数 CAST TO_ISO8601TO_UNIXTIMESTAMPTO_JSON 4.时间和日期…...

代理模式之静态代理

代理模式是一种常见的设计模式&#xff0c;它允许一个对象&#xff08;代理对象&#xff09;代表另一个对象&#xff08;真实对象&#xff09;进行操作。在软件开发中&#xff0c;代理模式被广泛应用于各种场景&#xff0c;例如网络请求的代理、权限控制的代理等。 静态代理是…...

LeetCode——栈的压入、弹出序列

这里我用下面的例子子来讲解一下模拟栈的实现。 例子1&#xff1a;pushed [1,2,3,4,5] popped [4,5,3,2,1] 思路&#xff1a;第一步&#xff1a;我们先创建一个栈&#xff0c;然后将pushed的数据压进去 第二步&#xff1a;判断&#xff01; 当压入栈的数据和popped第一个数据…...

Flutter 逆向安全

前言&#xff1a; 前几天在 "学习" 一个项目&#xff0c; 发现是用 Flutter 开发的。之前研究过 flutter 的逆向&#xff0c;早期 Flutter 有工具可以通过快照进行反编译&#xff1a;《对照表如下》 新的版本开发者没有维护了。 目前没有很好的工具 可以对 Flutter 进…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...