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

SQL高级 --优化

一、SQL查询的解析

  • 关联查询过多
  • 索引失效(单值、符合)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、mysql explain使用简介

在这里插入图片描述在这里插入图片描述

1、关于id的说明:

在这里插入图片描述

2 、select_type

常见和常用的值有如下几种:

分别用来表示查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

1、 SIMPLE 简单的select查询,查询中不包含子查询或者UNION

2、 PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY

3、 SUBQUERY 在SELECT或WHERE列表中包含了子查询

4、DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中

5、UNION 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
6、UNION RESULT 从UNION表获取结果的SELECT

3、 关于 type 说明

在这里插入图片描述
在这里插入图片描述

4 、 table

指的就是当前执行的表

5 、possible_keys 和 key

possible_keys: 显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。
key : 实际使用的索引,如果为NULL,则没有使用索引。(可能原因包括没有建立索引或索引失效)

6、 explain 关于 EXtra介绍

包含不适合在其他列中显式但十分重要的额外信息
在这里插入图片描述

6.1 Using filesort(九死一生)

说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”。

6.2 Using temporary(十死无生)

使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。

6.3 Using index(发财了)

表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。

6.4 Using where

表明使用了where过滤

6.5 Using join buffer

表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。

6.6 impossible where

where子句的值总是false,不能用来获取任何元组

SELECT * FROM t_user WHERE id = '1' and id = '2'

### 6.7 select tables optimized away
在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

### 6.8 distinct
优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

覆盖索引(Covering Index), 一般说为索引覆盖。

  • 理解方式一:就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖
  • 理解方式二:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。

- 小练习

在这里插入图片描述

答案:在这里插入图片描述

Join语句的优化

在这里插入图片描述

常见失效:

在这里插入图片描述

第2点解释、最佳左侧法则:

如果索引了多例,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列
自己理解:(在复合索引中)按照复合索引中的第一个字段进行引用。

第4点解释、存储引擎不能使用索引中范围条件右边的列。存储引擎不能使用索引中范围条件右边的列的比较

第5点解释、


在这里插入图片描述

第6点解释、

在这里插入图片描述

第7点解释、

在这里插入图片描述

第8点解释、

在这里插入图片描述
解决方法

  • like 匹配的值可以在左边写 % ,右边不能写。
  • 可以使用覆盖索引解决

第9点解释、字符串不加单引号索引失效

在这里插入图片描述

in与exists

在这里插入图片描述
在这里插入图片描述

ORDER BY优化

在这里插入图片描述

  • MySQL支持二种方式的排序,FileSort和Index,Index效率高.它指MySQL扫描索引本身完成排序。FileSort方式效率较低。在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

MYSQLDUNMPSLOW

在这里插入图片描述

在这里插入图片描述

三、批量导入数据时(1000w)时注意

在这里插入图片描述

  • 示例
  • 在这里插入图片描述
CREATE TABLE demo_dept(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
dname VARCHAR(20) NOT NULL DEFAULT "",
loc VARCHAR(13)NOT NULL DEFAULT ""
)ENGINE=INNODB ;

在这里插入图片描述

#创建表 demo_emp
CREATE TABLE demo_emp(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,##/*编号*
ename VARCHAR(20)NOT NULL DEFAULT"",##*名字*
job VARCHAR(9)NOT NULL DEFAULT"",##*工作*
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, ##/*上级编号*
hiredate DATE NOT NULL,##*入职时间*
sal DECIMAL(7,2) NOT NULL,##*薪水*
comm DECIMAL(7,2) NOT NULL,##*红利*
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0##*部门编号*
)ENGINE=INNODB ;
  • 2.1随机产生字符串
    在这里插入图片描述
##随机产生字符串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGINDECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghjklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUWWXYZ';DECLARE return_str VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 0;WHILE i<n DOSET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));SET i=i+1;END WHILE;RETURN return_str;
END $$
  • 2.2随机产生部门编号
    在这里插入图片描述
#用于随机产生部门编号
DELIMITER $$
CREATE FUNCTION rand_num()
RETURNS INT(5)
BEGIN
DECLARE i INT DEFAULT 0;
SET i= FLOOR(100+RAND()*10);
RETURN i;
END $$
  • 2.3创建往emp表中插入数据的存储过程(进行一次提交)
    在这里插入图片描述

CREATE DEFINER=`root`@`%` PROCEDURE `insert_emp`(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
##set autocommit =)把autocommit设置成0
SET autocommit = 0;
REPEAT
SET i = i+ 1;
INSERT INTO demo_emp (empno, ename ,job ,mgr ,hiredate ,sal ,comm ,deptno ) VALUES((START+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
UNTIL i = max_num END REPEAT;
COMMIT;
END

3、验证
在这里插入图片描述

  • 练习
    在这里插入图片描述

四 Profile进行sql分析

4.1 是否支持
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询时不要出现的:

在这里插入图片描述

4.2全局日志

在这里插入图片描述

  • 1 、配置启用在这里插入图片描述
  • 1 、编码置启用
    在这里插入图片描述

五、数据库锁机制

在这里插入图片描述
在这里插入图片描述
查看锁的命令 : show open tables;
在这里插入图片描述
释放锁

unlock 表名

在这里插入图片描述
在这里插入图片描述

简而言之,就是读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。

六、ACID原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事务隔离级别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
手动提交事务
在这里插入图片描述

七、大坑

7.1 无索引行锁升级为表锁

我们知道锁主要是加在索引上,如果对非索引字段更新,行锁可能会变表锁 , 从上面的测试中也可以验证这个观点。

结论
InnoDB的行锁是针对索引加的锁,不是针对记录加的锁 ,并且该索引不能失效,否则会从行锁升级为表锁 。

所以建表的时候 ,结合你的业务,如果有更新的操作,切记要对操作的字段建立索引,不然并发下这个问题就非常明显

7.2 间隙锁危害

对条件范围进行加锁
在这里插入图片描述

7.3 面试常见问题: 如何锁一行

在这里插入图片描述
杭锁总结:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


# 通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况
show STATUS LIKE 'innodb_row_lock%'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、 主从复制

8.1原理

在这里插入图片描述

8.2 规则在这里插入图片描述

复制的最大问题:有延时 !
在这里插入图片描述

一主一从配置

  1. MySQL版本必须一致。
  2. 主从都配置在[mysqld]结点下,都是小写
  3. 主机 my.ini配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 从机配置
  • [必须]从服务器唯一ID
  • [可选]启用二进制日志
  1. 关闭防火List item

  2. 在Windows主机上建立帐户并授权slave
    在这里插入图片描述
    在这里插入图片描述

  3. 从机配置在这里插入图片描述
    在这里插入图片描述

  4. stop slave ; -如何停止从服务复制功能

相关文章:

SQL高级 --优化

一、SQL查询的解析 关联查询过多索引失效&#xff08;单值、符合&#xff09; 二、mysql explain使用简介 1、关于id的说明&#xff1a; 2 、select_type 常见和常用的值有如下几种&#xff1a; 分别用来表示查询的类型&#xff0c;主要是用于区别普通查询、联合查询、子…...

【C++】空间配置器

空间配置器&#xff0c;听起来高大上&#xff0c;那它到底是什么东西呢&#xff1f; 1.什么是空间配置器&#xff1f; 空间配置器是STL源码中实现的一个小灶&#xff0c;用来应对STL容器频繁申请小块内存空间的问题。他算是一个小型的内存池&#xff0c;以提升STL容器在空间申…...

nginx的介绍及源码安装

文章目录前言一、nginx介绍二、nginx应用场合三、nginx的源码安装过程1.下载源码包2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务3.创建nginx服务启动脚本4.本实验---纯代码过程前言 高可用&#xff1a;高可用(High availability,缩写为 HA),是指系统无中断地执行其功…...

通过openssl生成pfx证书

通过centos7上自带的openssl工具来生成。首先创建一个pfxcert目录。然后进入此目录。 1.生成.key文件&#xff08;内含被加密后的私钥&#xff09;&#xff0c;要求输入一个自定义的密码 [rootlocalhost cert]# openssl genrsa -des3 -out server.key 2048 Generating RSA priv…...

华为OD机试真题Python实现【敏感字段加密】真题+解题思路+代码(20222023)

敏感字段加密 题目 给定一个由多个命令字组成的命令字符串; 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号命令字之间以一个或多个下划线_进行分割可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字…...

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…...

金三银四,我不允许你们不知道这些软件测试面试题

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…...

【UnityEditor】Unity将Multiple Sprite分割成多张png小图

如题&#xff0c;代码如下 using UnityEngine; using UnityEditor; using System.IO;public class SplitTexture {[MenuItem("ExtraTools/SplitTexture")]static void DoSplitTexture(){// 获取所选图片Texture2D selectedImg Selection.activeObject as Texture2D…...

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …...

记一次KindEditor表格修改无效问题

项目说明 项目是由UmiJS创建的(ReactAnt Design4.2)&#xff0c;项目需求是富文本编辑器录入多样内容&#xff0c;可供查看。 通过各方探索以及客户的沟通&#xff0c;选定了KindEditor编辑器&#xff0c;通过iframe嵌入。但仍有很多不符合要求的地方&#xff0c;所以要进行很…...

一种图片展示的完美方案,图片展示,object-fill

通常一般的处理 <style>.img-container {width: 300px;height: 200px;background: #f60;}img {width: 100%;height: 100%;}</style> </head> <body><div class"img-container"><img src"./行道树.png" alt""&g…...

社科院杜兰金融管理硕士——考研初试成绩已出,关于分数“6线”你有了解吗

多地公布了2023考研初试成绩查询时间&#xff0c;部分省份今日就能查询到考研初试成绩&#xff0c;考研学子们此刻的心情应该是很忐忑吧&#xff0c;关于分数的“6线”你都知道有哪些吗&#xff1f;我们跟随社科院杜兰金融管理硕士项目一起去了解一下。1.国家线教育部依据硕士生…...

Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合

本期为TechBeat人工智能社区第474期线上Talk&#xff01; 北京时间2月15日(周三)20:00&#xff0c;清华大学交叉信息研究院助理教授——杜韬的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “利用计算方法探究流固耦合”&#xff0c;届时将介绍流固…...

2023年,智能家居实体门店如何选品?

作者 | 启明 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn2023年&#xff0c;是智能家居实体门店的机会与破局之年&#xff0c;作为智能家居实体门店老板&#xff0c;我们应该具备什么样的增长思维呢&#xff1f;上篇文章智哪儿谈了智能家居增长思维之流量思维 &#xff0c;这篇文章我…...

数据分析-深度学习 NLP Day2关键词提取案例

训练一个关键词提取算法需要以下几个步骤&#xff1a;1&#xff09;加载已有的文档数据集&#xff1b;2&#xff09;加载停用词表&#xff1b;3&#xff09;对数据集中的文档进行分词&#xff1b;4&#xff09;根据停用词表&#xff0c;过滤干扰词&#xff1b;5&#xff09;根据…...

LeetCode题解:938. 二叉搜索树的范围和,BFS,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/range-sum-of-bst/ 解题思路&#xff1a; 对于二叉搜索树的任意节点&#xff0c;左子树的所有节点值都小于它的值&#xff0c;右子树的所有节点值都小于它的值。使用队列进行BFS搜索&#xff0c;如果当前节点的值小于low&…...

istio初步了解

istio 控制平面&#xff1a; Pilot&#xff1a;管理和配置部署在特定istio服务网格中的所有sidecar代理实例&#xff0c;管理sidecar代理之间的路由流量规则&#xff0c;并配置故障恢复功能&#xff0c;如超时、重试、熔断。 Citadel&#xff1a;istio中负责身份认证和证书管…...

【模板】用HTML编写邮件正文 | 各大邮箱几乎都会过滤css样式、js脚本等效果,如何用基础HTML编写?

用HTML编写邮件正文 文档 编码格式utf-8&#xff08;使用记事本或其他工具打开&#xff0c;在文件->另存为&#xff0c;编缉选择UTF-8格式&#xff09; 文档大小在15kb以内 样式 页面宽度&#xff1a;600px~800px 尽量用特殊元素以及元素属性代替样式 样式全部写为内联样式…...

华为云计算之双活容灾

双活&#xff08;HyperMetro&#xff09;本地双活&#xff1a;距离≤10km同城双活&#xff1a;距离&#xff1e;10km没有主备之分&#xff0c;只有本端数据中心和远端数据中心。当一个数据中心的设备故障或数据中心故障&#xff0c;业务会自动切换到另一个数据中心继续运行&…...

ASEMI高压MOS管ASE20N65SE体积,ASE20N65SE大小

编辑-Z ASEMI高压MOS管ASE20N65SE参数&#xff1a; 型号&#xff1a;ASE20N65SE 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;650V 栅源电压&#xff08;VGS&#xff09;&#xff1a;30V 漏极电流&#xff08;ID&#xff09;&#xff1a;20A 功耗&#xff08;P…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...