MySQL索引优化解决方案--索引测试--explain(2)

索引测试

  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))
begindeclare i int default 0set autocommit = 0;repeatset 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_numend repeat;commit;
end;-- 调用存储过程
call insert_person(3000000);-- 不使用索引,根据PNAME进行查询
select * from person where PNAME = 'test1209325'; #10.813秒-- 给PNAME建立普通索引
alter table person add index idx_pname(PNAME);
select * from person where PNAME = 'test1209325'; #5.032秒
-- 主键索引
select * from person where PID = 2800000; #0.021秒

explain 关键字

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句的。可以用来分析查询语句或是表的结构的性能瓶颈。其作用如下:

  1. 表的读取顺序
  2. 哪些索引可以使用
  3. 数据读取操作的操作类型
  4. 哪些索引被实际使用
  5. 表之间的引用
  6. 每张表有多少行被优化器查询

EXPLAIN 关键字使用起来比较简单: explain + SQL语句

准备测试数据:

-- 创建四张测试表
CREATE TABLE t1(id int(10) auto_increment,content varchar(100),primary key (id)
)CREATE TABLE t2(id int(10) auto_increment,content varchar(100),primary key (id)
)CREATE TABLE t3(id int(10) auto_increment,content varchar(100),primary key (id)
)CREATE TABLE t4(id int(10) auto_increment,content varchar(100),primary key (id)
)-- 每张表中添加一条数据
INSERT INTO t1(content) values (CONCAT('t1_',FLOOR(1+RAND()*1000)));
INSERT INTO t1(content) values (CONCAT('t2_',FLOOR(1+RAND()*1000)));
INSERT INTO t1(content) values (CONCAT('t3_',FLOOR(1+RAND()*1000)));
INSERT INTO t1(content) values (CONCAT('t4_',FLOOR(1+RAND()*1000)));

explain之id介绍

select 查询的序列号,表示查询中执行select子句或操作表的顺序。

# id相同时,执行顺序由上至下。
explain select * from t1,t2,t3 where t1.id = t2.id and t2.id=t3.id;` #得到表格1# id不同,如果是子查询,id的序号会递增,id值越大优先级越高,则先被执行。
explain select t1.id from t1 where t1.id in (select t2.id from t2 where t2.id in (select t3.id from t3 where t3.id = 1)
) # 得到表格2# id相同和不同都存在时,id相同的可以理解为一组,从上往下顺序执行,所有组中,id值越大,优先级越高越先执行。explain select t2.* from t2,(select * from t3) s3 where s3.id = t2.id; #得到表3

表格1:

idselect_typetabletypepossible_keyskeyken_lenrefrowsExtra
1SIMPLEt1ALLPRIMARYnullnullnull1
1SIMPLEt2eq_refPRIMARYPRIMARY4db_test_t1.id1
1SIMPLEt3eq_refPRIMARYPRIMARY4db_test_t1.id1

表格2:

idselect_typetabletypepossible_keyskeyken_lenrefrowsExtra
1PRIMARYt1indexnullPRIMARYnullnull1
2DEPENDENTt2unique_subPRIMARYPRIMARY4func1Using index
3SIMPLEt3constPRIMARYPRIMARY4const1Using index

表格3:

idselect_typetabletypepossible_keyskeyken_lenrefrowsExtra
1PRIMARY<derived2>systemnullnullnullnull1
1PRIMARYt2constPRIMARYPRIMARY4const1
2DERIVEDt3ALLnullnullnullnull1

Explain之select_type介绍

Explain之type介绍 -1

Explain之type介绍 -2

Explain之type介绍 -3

Explain之prossible key和key介绍

Explain之ref介绍

Explain之row介绍

Explain之extra介绍

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

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

相关文章

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容&#xff0c;文本三剑客都是针对文本内容。 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 awk&#xff1a;按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m&#xff1a;匹配几次之后停止…

【论文解读】通过多标记预测建立更好更快的大型语言模型

Meta 的这篇多标记预测论文显示,与当前的下一标记预测器相比,多头预测器内存效率高、性能更好、训练速度更快。 https://arxiv.org/pdf/2404.19737 主要收获: 多标记预测是对 LLM 训练的一种简单而强大的修改,可提高样本效率和各种任务的性能。这种方法在大规模应用中尤为…

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们&#xff0c;希望从HDFS迁移到现代对象存储&#xff0c;如MinIO。我们现在以为每个人都已经完成了过渡&#xff0c;但每周&#xff0c;我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候&#xff0c;在这些讨论中&#xff…

安卓 jetpack compose

以下是 Jetpack Compose 中常用的一些组件的列表&#xff1a; 组件名称描述Text用于显示文本内容。Button可点击的按钮组件&#xff0c;常用于触发事件。TextField用于输入文本的文本框组件。Image用于展示图片。Column垂直布局容器&#xff0c;可以在其中垂直排列子组件。Row…

Mac环境 aab包转apks,并安装apks

一、下载下载bundletool工具 Releases google/bundletool GitHub 二、将下载bundletool.jar包、aab、keystore文件全部放到同一个目录下 例如我全部放到download目录下 转换命令行&#xff1a; java -jar bundletool-all-1.16.0.jar build-apks --modeuniversal --bundle…

java运维交接项目逆向工程

​ 背景 有承接过Java项目运维的团队估计都处理过的一件事情&#xff0c;就是同步生产代码跟本地代码&#xff0c;条件再差些甚至要直接基于生产部署包逆向本地源码工程。而哪怕是原运维团队交接了源码&#xff0c;往往也会历史久远的原因&#xff0c;给了一份不太可靠的源码…

MySQL连接

MySQL工具包 MySQL实现简单链接 一 引入工具包 JBDCUtils&#xff0c;无需更改&#xff0c;直接使用即可。 import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties;public class JDBCUtil {private static String URL;p…

基于PHP+MySQL组合开发的在线客服小程序源码系统 带完整的安装代码包以及搭建教程

系统概述 源码系统是专门为满足企业在线客服需求而设计的&#xff0c;它集成了多种功能&#xff0c;能够帮助企业实现与用户的实时沟通、问题解答、信息反馈等。通过该系统&#xff0c;企业可以更好地了解用户需求&#xff0c;提升用户体验&#xff0c;增强用户对企业的信任感…

Java面试题:解释观察者模式的工作原理,并通过实例展示如何在Java中实现

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时&#xff0c;它的所有依赖者&#xff08;观察者&#xff09;都会收到通知并自动更…

Linux[高级管理]——Squid代理服务器的部署和应用(传统模式详解)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月24日11点11分 &#x1f004;️文章质量&#xff1a;95分 目录 ————前言———— Squid功能 Squ…

LabelEncoder 类属性类方法及用法

类 LabelEncoder类属性及类方法示例用法用于大型数据集 类 LabelEncoder LabelEncoder 是 scikit-learn 中的一个预处理工具&#xff0c;用于将类别变量&#xff08;例如字符串标签或离散的整数标签&#xff09;转换为整数。 类 LabelEncoder 在包 sklearn.preprocessing.Lab…

【JavaEE精炼宝库】多线程进阶(1)常见锁策略 | CAS | ABA问题

目录 一、常见的锁策略&#xff1a; 1.1 悲观锁 | 乐观锁&#xff1a; 1.2 重量级锁 | 轻量级锁&#xff1a; 1.3 自旋锁 | 挂起等待锁&#xff1a; 1.4 公平锁 | 非公平锁&#xff1a; 1.5 可重入锁 | 不可重入锁&#xff1a; 1.6 互斥锁 | 读写锁&#xff1a; 1.7 面…

Spring Boot 集成 MinIO 实现文件上传

Spring Boot 集成 MinIO 实现文件上传 一、 Minio 服务准备 MinIO的搭建过程参考 Docker 搭建 MinIO 对象存储。 登录MinIO控制台&#xff0c;新建一个 Bucket&#xff0c;修改 Bucket 权限为公开。 二、MinIO 集成 添加 MinIO 依赖 <!-- https://mvnrepository.com/ar…

【工具测评】ONLYOFFICE——你的下一款桌面编辑器

文章目录 前言一、安装1.1 跳转官网下载安装包1.2 安装步骤 二、功能介绍2.1 功能全面的 PDF 编辑器2.2 PDF 表单2.3 文本文档编辑器的更新2.4 电子表格编辑器的更新2.5 演示文稿编辑器有哪些更新2.6 所有编辑器中的改进内容2.7 从右至左显示 & 新的本地化选项2.8 可用性提…

查找一个有向网络的头节点和尾节点 (70%用例)C卷(JavaPythonC++Node.jsC语言)

给定一个有向图,图中可能包含有环,有向边用两个节点表示。第一个整数表示起始节点,第二个整数表示终止节点,如0 1表示存在从0到1的路径。每个节点用正整数表示,求这个数据的头节点与尾节点,题目给的用例会是一个头节点,但可能存在多个尾节点。同时,图中可能含有环,如果…

重生奇迹MU整理装备技巧

除了注意一些基本的事项外&#xff0c;还有一些技巧可以帮助我们更快更好地整理装备&#xff0c;提升自己在游戏中的表现。 1. 理性地管理装备是取得胜利的关键。在整理装备时&#xff0c;根据不同的属性和需求&#xff0c;可以将装备分类&#xff0c;比如攻击型、防御型、辅助…

CRMEB 多门店后台登录入口地址修改(默认admin)

一、>2.4版本 1、修改后端 config/admin.php 配置文件,为自定义的后缀 2、修改 平台后台前端源码中 view/admin/src/settings.js 文件,修改为和上面一样的配置 3、修改后重新打包前端代码,并且覆盖到后端的 public 目录下&#xff1a;打包方法 4、重启swoole 二、<2.4版…

深度神经网络中的“深度”概念解析

引言 深度神经网络&#xff08;Deep Neural Networks, DNNs&#xff09;是机器学习领域的一大突破&#xff0c;它们在图像识别、自然语言处理、游戏等领域取得了革命性的进展。DNNs的核心特性之一就是其“深度”&#xff0c;这通常指的是网络中层的数量。本文将深入探讨深度神…

云函数-uniapp + uniCloud 订阅消息实战教程(二)

一、创建uniCloud项目 在 HBuilderX 新建项目界面&#xff0c;选择 uni-app项目&#xff0c;输入项目名称&#xff0c;选择默认模板即可&#xff0c;根据个人需要选择 vue版本&#xff0c;并勾选 启用uniCloud&#xff0c;在右侧选择服务供应商&#xff08;支付宝云、阿里云、…

人机交互中的“测不准原理”

谈及人机交互中的“测不准原理”时&#xff0c;我们所指的并非物理学中量子力学的测不准原理&#xff0c;而是一种借用该概念来描述在人机交互领域中出现的不确定性和不可预测性现象。这种不确定性主要表现在以下几个方面&#xff1a; 用户在与系统交互时的行为和反应可能是难以…