动力节点索引优化解决方案学习笔记——索引介绍

news2025/7/10 3:34:08

1.索引介绍

1.1什么是MySQL的索引

MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。
MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。
简单理解为“排好序的可以快速查找数据的数据结构”。

例子:
如果现在有一张USER表,里面有name字段,我们想要查找值为赵六的那条数据,如果没有索引,我们要全局搜索,在第六次查到此条数据,如果使用二叉排序树,那我们只需要查找三次,效率翻倍!
在这里插入图片描述

1.2索引数据结构

下图就是一种可能的二叉树的索引方式:
在这里插入图片描述

二叉树数据结构的弊端:当极端情况下,数据递增插入时,会一直向右插入,形成链表,查询效率会降低。

MySQL中常用的的索引数据结构有BTree索引(Myisam普通索引),B+Tree索引(Innodb普通索引),Hash索引(memory存储引擎)等等。

1.3索引优势

提高数据检索的效率,降低数据库的IO成本。
通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

1.4索引劣势

索引实际上也是一张表,保存了主键和索引的字段,并且指向实体表的记录,所以索引也是需要占用空间的。在索引大大提高查询速度的同时,却会降低表的更新速度,在对表进行数据增删改的同时,MySQL不仅要更新数据,还需要保存一下索引文件。每次更新添加了的索引列的字段,都会去调整因为更新带来的减值变化后的索引的信息。

1.5索引使用场景

哪些情况需要创建索引:
1.主键自动建立唯一索引
2.频繁作为查询条件的字段应该创建索引(where 后面的语句)
3.查询中与其它表关联的字段,外键关系建立索引
4.多字段查询下倾向创建组合索引
5.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
6.查询中统计或者分组字段

哪些情况不推荐建立索引:
1.表记录太少
2.经常增删改的表
3.Where条件里用不到的字段不建立索引

1.6索引分类

1.6.1主键索引

1.表中的列设定为主键后,数据库会自动建立主键索引。
2.单独创建和删除主键索引语法:
创建主键索引语法:

alter table 表名 add primary key (字段);

删除主键索引语法:

alter table 表名 drop primary key;

1.6.2唯一索引

1.表中的列创建了唯一约束时,数据库会自动建立唯一索引。
2.单独创建和删除唯一索引语法:
创建唯一索引语法:

alter table 表名 add unique 索引名(字段);
或者  
create unique index 索引名 on 表名(字段)

删除唯一索引语法:

drop index 索引名 on 表名;

1.6.3单值索引

即一个索引只包含单个列,一个表可以有多个单值索引。
1.建表时可随表一起建立单值索引
2.单独创建和删除单值索引:
创建单值索引:

alter table 表名 add index 索引名(字段);
或者   
create index 索引名 on 表名(字段);

删除单值索引:

drop index 索引名 on 表名;

1.6.4复合索引

即一个索引包含多个列:
1.建表时可随表一起建立复合索引
2.单独创建和删除复合索引:
创建复合索引:

create index 索引名 on 表名(字段1,字段2);
或者 
alter table 表名 add index 索引名(字段,字段2);

删除复合索引:

drop index 索引名 on 表名; 

例子:
首先我们随表创建索引
在这里插入图片描述

在设计表中我们可以查看创建的索引

在这里插入图片描述

我们也可以在创建表之后添加索引

将之前创建的表删除 再创建不带索引的表
在这里插入图片描述

现在没有任何索引
在这里插入图片描述
在这里插入图片描述
然后通过1.6中的命令进行增加删除索引,这里不再概述!

#创建主键索引
alter table customer add primary key(id);
#删除主键索引
alter table customer drop primary key;

#创建唯一索引
alter table customer add unique idx_customer_no(customer_no);
#删除唯一索引
drop index idx_customer_no on customer;

#创建单值索引
alter table customer add index idx_customer_name(customer_name);
#删除单值索引
drop index idx_customer_name on customer;

#创建复合索引
alter table customer add index idx_customer_no_name(customer_no,customer_name);
#删除复合索引
drop  index idx_customer_no_name on customer;

1.7索引测试

1.通过存储过程往数据库中插入300W条数据。
2.分别测试使用索引和没有使用索引的情况下,where查询的一个效率对比。

例子:

-- 建表
DROP TABLE IF EXISTS person;
CREATE TABLE person  (
  PID int(11) AUTO_INCREMENT COMMENT '编号',
  PNAME varchar(50) COMMENT '姓名',
  PSEX varchar(10) COMMENT '性别',
	PAGE	int(11) COMMENT '年龄',
  SAL decimal(7, 2) COMMENT '工资',
  PRIMARY KEY (PID)
);

-- 创建存储过程
create procedure insert_person(in max_num int(10))
begin
	declare i int default 0;
	set autocommit = 0; 
	repeat
	set i = i +1;
	insert into person (PID,PNAME,PSEX,PAGE,SAL) values (i,concat('test',floor(rand()*10000000)),IF(RAND()>0.5,'男','女'),FLOOR((RAND()*100)+10),FLOOR((RAND()*19000)+1000));
	until i = max_num
	end repeat;
	commit;
end;

-- 调用存储过程
call insert_person(30000000);
 
-- 不使用索引,根据pName进行查询
select * from person where PNAME = "test1209325"; #10.813S

-- 给PNAME建立索引
alter table person add index idx_pname(PNAME);
select * from person where PNAME = "test1209325"; # 0.032S
select * from person where PID = 2800000; #0.021

可以看到,添加了普通索引,查询效率提高了很多!

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

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

相关文章

决策树算法

目录 ​分类算法 决策树算法 外卖订餐决策树 分支处理 分类算法 分类算法是利用训练样本集获得分类函数即分类模型(分类器),从而实现将数据集中的样本划分到各个类中。分类模型通过学习训练样本中属性集与类别之间的潜在关系,并以此为依据对新样本属…

测试基础——数据库及数据库表的SQL操作(了解即可)

目录 1.数据库基础概念 2.SQL介绍 3.MySQL介绍 4.数据库连接工具Navicat 5.数据类型 6.约束 7.对数据库操作的SQL语句 7.1创建数据库 7.2使用/打开/切换数据库 7.3修改数据库 7.4删除数据库 7.5查看所有数据库 7.6数据库备份 8.数据库表操作的SQL语句 8.1创建数据…

VisualSFM的配置与使用 MeshLab的网格生成与纹理添加

前言 本实验环境如下: VisualSFM版本V0.5.26 MeshLab版本2022.02 操作系统Windows10,64bit 0 VisualSFM配置 0.1 下载 VisualSFM下载链接:VisualSFM : A Visual Structure from Motion System Cmvs-Pmvs下载链接:GitHub -…

[附源码]SSM计算机毕业设计郑工校园二手交易平台网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

有限自动机字符串匹配

上一篇文章正则表达式,提到正则表达式是一种用来表示有限自动机所接受单词组合的语言,那么什么是有限自动机呢,以及它是如何进行字符串匹配的,下面来做详细介绍 什么是有限自动机 目前程序上利用不同的编程语言通过正则表达式进…

泰勒公式理解

文章目录1:一元泰勒展开公式2:二元泰勒展开公式3:二元函数的黑塞矩阵4:多元函数的黑塞矩阵其他链接1:一元泰勒展开公式 举例:f(x) 3x 2x 5 在x0或x1处的泰勒展开 当x0时: 当x1时&#xff…

cadence orcad capture tcl/tk脚本开发

Orcad是一个很优秀的原理图工具,orcad支持tcl/tk开发,介绍一下当前本人开发的脚本工具,可用于提高硬件工程师的画图效率。 环境准备 将压缩包解压到C盘(注意一定要C盘根目录下),C:\Tcltk。如下图所示将上图…

Selector的使用

文章目录Selector 的使用1.直接使用2. Scrapy Shell3.XPath 选择器4.CSS选择器5.正则匹配Selector 的使用 我们之前介绍了利用Beautiful Soup、pyquery 以及正则表达式来提取网页数据的方法,确实非常方便。不过Scrapy提供了自己的数据提取方法,即内置的…

[附源码]java毕业设计社区志愿者服务系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

传输中的差错检验技术

差错检验 在网络传输过程数据难免会产生错误,需要使用差错检验技术进行纠错,可靠传输技术避免错误的发生 1 术语 比特差错 误码率BER 差错检验码 2 奇偶校验(不会采用) 在待发送的数据后面添加1位奇偶校验位,使整…

MyBatis基于XML的详细使用-参数、返回结果 处理

1、参数的取值方式 在xml文件中编写sql语句的时候有两种取值的方式,分别是#{}和${}。 注意:这里推荐使用#{}的方式,可以有效的防止sql注入问题。 2、select的参数传递 1.单个参数: 不管多少个参数最好在参数前加上param注解,为其取一个别名 2.多个参数…

[网络工程师]-传输层协议-TCP拥塞控制

TCP拥塞控制的概念是:每个源端判断当前网络中有多少可用容量,从而知道它可以安全完成传送的分组数。拥塞控制解释防止过多的数据注入网络,避免网络中间设备(路由器、交换机等)过载而发生拥塞。拥塞控制是一个全局性的过…

数据结构系列学习(九) - 循环队列(Circular_Queue)

目录 引言: 学习: 循环队列设计背景: 利用顺序表的思维对队列进行探讨: 解决方案的思考: 循环队列中循环的体现: 循环队列的要点: 第一个难点: 第二个难点: 第三…

Verilog 显示任务($display, $write, $strobe, $monitor)

Verilog 中主要用以下 4 种系统任务来显示(打印)调试信息:$display, $write, $strobe, $monitor。 $display $display 使用方法和 C 语言中的 printf 函数非常类似,可以直接打印字符串,也可以在字符串中指定变量的格…

7. 微服务之Docker自动化部署

7.1 Docker 介绍 Docker 是一个快速交付应用、运行应用的技术: 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器,各个应用互不干扰启动、移除都可以通过一行命令完成&#xff…

华清远见:驱动点灯第N回目

1.在串口工具进行输入: echo 1 > /dev/myled0 ---->led1灯点亮 echo 0 > /dev/myled0 ---->led1灯熄灭 echo 1 > /dev/myled1 ---->led1灯点亮 echo 0 > /dev/myled1 ---->led1灯熄灭 echo 1 > /dev/myled2 ---->led1灯点亮 ec…

力扣刷题day52|84. 柱状图中最大的矩形

文章目录84. 柱状图中最大的矩形思路动态规划单调栈84. 柱状图中最大的矩形 力扣题目链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: …

空间域图像增强处理-含Labview程序

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、领域图像增强实例分析✳️ 2.1 线性滤波实例分析✳️ 2.2 非线性滤波实例分析✳️ 2.3 Canny边缘检测✳️ 三、Labview程序获取✳️ 一、引言 图像在其采集或传递过程中常会受到各种噪声的影响,这会导致其中包含的重要信息很…

忘机工尺谱 - 快速打谱软件

引言 为了实现高效快速打谱,我实现了一种词谱分离的输入方案,解决了当前工尺谱平台打谱过程频繁切换输入法和频繁点击鼠标等问题,大大提高了打谱效率。同时借鉴了Markdown编辑器”所见即所得“的思想,输入的同时可以见到排版后的…

java线程控制

java线程控制的语法很多 这里我们主要说以下三个方法 我们先新建一个包 包下建立两个类 customException 线程类 参考代码如下 public class customException extends Thread {public String name;public customException(){}public void run(){for(int i 0;i < 100;i)…