查询截取分析

2023-05-16

三、查询截取分析

1、查询优化

1.永远小表驱动大表,类似嵌套循环Nested Loop

Case
在这里插入图片描述

  • EXISTS

SELECT … FROM table WHERE EXISTS(subquery)
该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或 FALSE)来决定查询的数据结果是否得以保留。

  • 提示

1 EXISTS (subquery)只返回TRUE或FALSE, 因此子查询中的SELECT * 也可以是SELECT 1select 'X', 官方说法是实际执行时会忽略SELECT清单,因此没有区别。

2 EXISTS子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。

3 EXISTS子查询往往也可以用条件表达式、其他子查询或者JOIN来替代,何种最优需要具体问题具体分析。

2.order by关键字优化

1.ORDER BY子句,尽量使用 Index 方式排序,避免使用 FileSort 方式排序

建表SQL

CREATE TABLE tblA(
	#id primary key not nuull auto_increment,
	age INT,
	birth TIMESTAMP NOT NULL
);

INSERT INTO tblA(age,birth) VALUES(22,NOW());
INSERT INTO tblA(age,birth) VALUES(23,NOW());
INSERT INTO tblA(age,birth) VALUES(24,NOW());

CREATE INDEX idx_A_ageBirth ON tblA(age,birth);

select * from tblA;

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

MySQL支持二种方式的排序,FileSort 和 Index, Index效率高。
它指MySQL扫描索引本身完成排序。FileSort方式效率较低。

ORDER BY满足两情况,会使用 Index 方式排序:

  • ORDER BY语句使用索引最左前列。
  • 使用 Where子句与Order BY子句条件列组合满足索引最左前列。

尽可能在索引列上完成排序操作,遵照索引建的最佳左前缀。

2.如果不在索引列上,filesort有两种算法:mysq|就要启动双路排序和单路排序

  • 双路排序:MySQL4.1之前是使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和orderby列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
    从磁盘取排序字段,在buffer进行排序,再从磁盘取其他字段。

取一批数据,要对磁盘进行了两次扫描,众所周知,I\O是很耗时的,所以在mysql4.1之后,出现了第二种改进的算法,就是单路排序。

  • 单路排序:从磁盘读取查询需要的所有列,按照 order by 列在 buffer 对它们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机 IO 变成了顺序 IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。

结论及引申出的问题:

  • 由于单路是后出的,总体而言好过双路
  • 但是用单路有问题
    在sort_buffer中, 方法B比方法A要多占用很多空间,因为方法B是把所有字段都取出,所以有可能取出的数据的总大小超出了sort_buffer的容量, 导致每次只能取sort_buffer容量大小的数据,进行排序(创建tmp文件,多路合并),排完再取取sort_buffer容量大小,再排…从而多次I/O。
    本来想省一次I/O操作, 反而导致了大量的I/O操作,反而得不偿失。

3.优化策略

  • 增大 sort_buffer_size 参数的设置
  • 增大 max_length_for_sort_data 参数的设置
  • Why

提高Order By的速度

1.Order by 时 select * 是一个大忌只 Query 需要的字段,这点非常重要。 在这里的影响是:

1.1 当Query的字段大小总和小于 max_length_for_sort_data 而且排序字段不是 TEXT | BLOB 类型时,会用改进后的算法 ----- 单路排序,否则用老算法 ---- 多路排序。
1.2 两种算法的数据都有可能超出sort_buffer的容量, 超出之后,会创建tmp文件进行合并排序,导致多次I/O, 但是用单路排序算法的风险会更大一些,所以要提高sort_buffer_size。

2.尝试提高sort_buffer_size
不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的。

3.尝试提高max_length_for_ sort_data
提高这个参数,会增加用 改进算法的概率。但是如果设的太高,数据总容量超出sort_buffer_size的概率就增大,明显症状是高的磁盘I/O活动和低的处理器使用率。

4.小总结
在这里插入图片描述

3.group by关键字优化

  • group by实质是先排序后进行分组,遵照索引建的最佳左前缀。
  • 当无法使用索引列,增大max_length_for_sort_data 参数的设置 + 增大sort_buffer_size参数的设置。
  • where高于having,能写在where限定的条件就不要去having限定了。

2、慢查询日志

1.是什么

  • MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
  • 具体指运行时间超过 long_query_time 值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
  • 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一-条sq|执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析。

2.怎么玩

  1. 说明

默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件

  1. 查询是否开启及如何开启

默认情况下 slow_query_log 的值为OFF,表示慢查询日志是禁用的,可以通过设置 slow_query_log 的值来开启。
默认:SHOW VARIABLES LIKE ‘%slow_query_log%’;
在这里插入图片描述
开启:set global slow_query_log=1;
开启慢查询日志只对当前数据库生效,如MySQL重启后则会失效。
在这里插入图片描述
如果要永久生效,就必须修改配置文件my.cnf (其他系统变量也是如此)

修改my.cnf 文件,[mysqld]下增加或修改参数
slow_query_log 和 slow_query_log_file 后,然后重启MySQL服务器。也即将如下两行配置进my.cnf 文件

slow_query_log=1
slow_query_log_file=/var/lib/mysql/atguigu-slow.log

关于慢查询的参数slow_query_log_file, 它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话)

  1. 那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢?

这个是由参数long_query_time 控制,默认情况下long_query_tome的值为10秒,
命令:SHOW VARIABLES LIKE ‘%long_query_time%’;
在这里插入图片描述
可以使用命令修改,也可以在my.cnf 参数里面修改。

加入运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于

  1. Case

查看当前多少秒算慢:SHOW VARIABLES LIKE ‘%long_query_time%’;

设置慢的阙值时间:使用 set global slow_query_log=3; 修改为阙值到3秒钟的就是慢sql
在这里插入图片描述

为什么设置后看不出变化?

  • 需要重新连接或断开一个会话才能看到修改值。
    SHOW VARIABLES LIKE ‘long_query_time%’;
  • show global variables like ‘long_query_time’;

记录慢SQL并后续分析

在这里插入图片描述

查询当前系统中有多少条慢查询记录

show global status like ‘%Slow_queries%’;

在这里插入图片描述

  1. 配置版

【mysqld】下配置:

slow_query_log=1
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
long_query_time=3;
log_output=FILE

3.日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。

查看mysqldumpslow的帮助信息:

命令:mysqldumpslow --help

  • s:是表示按照何种方式排序;
  • c:访问次数
  • |:锁定时间
  • r:返回记录
  • t:查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • t:即为返回前面多少条的数据;
  • g:后边搭配一个正则匹配模式,大小写不敏感的;

工作常用参数:

得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/ib/mysql/atguigu-slow.log

得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 Nvar/lib/mysql/atguigu-slow.log

得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/atguigu-slow.log

另外建议在使用这些命令时结合 | 和 more 使用,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/ib/mysql/atguigu-slow.log | more

3、批量数据脚本

往表里插入1000W数据

1)建表

# 新建表
create database bigData;
use bigData;

#1 建表dept
CREATE TABLE 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 DEFAULT CHARSET=GBK;

#2 建表emp
CREATE TABLE 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 DEFAULT CHARSET=GBK;

2)设置参数log_bin_trust_function_creators

在这里插入图片描述

3)创建函数,保证每条数据都不同

  • 随机产生字符串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE return_str VARCHAR(100) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i<n DO
SET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
SET i=i+1;
END WHILE;
RETURN return_str;
END $$

#假如要删除
#drop funtion rand_string();
  • 随机产生部门编号
DELIMITER $$
CREATE FUNCTION rand_num()
RETURNS INT(5)
BEGIN
DECLARE i INT DEFAULT 0;
SET i=FLOOR(100+RAND()*10);
RETURN i;
END $$

#假如要删除
#drop funtion rand_num();

4)创建存储过程

  • 创建往emp表中插入数据的存储过程
DELIMITER $$
CREATE FUNCTION insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
#set autocommit=0 把 autocommit设置成0
SET autocommit=0;
REPEAT
SET i =i+1;
INSERT INTO emp(empno,ename,job,mgr,hirdate,sal,comm,deptno) VALUES((START+i),
rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$
  • 创建往dept表中插入数据的存储过程
DELIMITER $$
CREATE FUNCTION insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit=0;
REPEAT
SET i =i+1;
INSERT INTO dept(deptno,dname,loc) VALUES((START+i),rand_string(10),rand_string(8));
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$

5)调用存储过程

  • dept
DELIMITER;
CALL insert_dept(100,10);
  • emp
DELIMITER;
CALL insert_emp(100001,500000);

4、Show Profile

1.是什么

是mysq|提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量。

2.官网

http://dev.mysql.com/doc/refman/5.5/en/show-profile.html

默认情况下,参数处于关闭状态,并保存最近15次的运行结果。

3.分析步骤

1.是否支持,看看当前的mysq|版本是否支持

命令:Show variables like ‘profiling’;
默认是关闭,使用前需要开启 。
在这里插入图片描述
或者:Show variables like ‘profiling%’;

2.开启功能,默认是关闭,使用前需要开启

命令:set profiling=on;
set
3.运行SQL

  • select * from emp group by id%10 limit 150000;
  • select * from emp group by id%20 order by 5;

4.查看结果,show profiles;

5.诊断SQL, show profile cpu,block io for query上一步前面的问题SQL数字号码

参数备注:
在这里插入图片描述

6.日常开发需要注意的结论

  • converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。
  • Creating tmp table 创建临时表
    • 拷贝数据到临时表
    • 用完再删除
  • Copying to tmp table on disk 把内存中临时表复制到磁盘,危险。。。
  • locked

5、全局查询日志

1.配置启用

在mysql的 my.cnf 中,设置如下:
#开启
general_log=1
#记录日志文件的路径
general_log_file=/path/logfile
#输出格式
log_output=FILE

2.编码启用

  • set global general_log=1;
  • set global log_output=‘TABLE’;

此后,你所编写的sql语句,将会记录到mysql库里的general_log表,可以用下面的命令查看。

  • select * from mysql.general_log;

永远不要再生产环境开启这个功能。


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查询截取分析 的相关文章

  • JDK8新特性(Lambda、Stream、Optional)

    文章目录 1 为什么使用Lambda表达式 xff1f 2 Lambda表达式的使用3 函数式 xff08 functional xff09 接口4 方法引用与构造器引用方法引用的使用构造器引用的使用 5 Stream APIStream
  • Java JUC

    Java JUC 1 Java JUC简介 在 Java 5 0 提供了 java util concurrent xff08 简称 JUC xff09 包 xff0c 在此包中增加了在并发编程中很常用的实用工具类 xff0c 用于定义类似
  • mybatis 概述 | 配置文件详解

    一 xff0c Mybatis入门和自定义Mybatis 1 框架概述 1 xff09 什么是框架 它是我们软件开发中的一套解决方案 xff0c 不同的框架解决的是不同的问题 使用框架的好处 xff1a 框架封装了很多的细节 xff0c 使
  • PyTorch:torch.zeros_like()的用法

    作用 xff1a 产生一个与a相同shape的Tensor 举例 xff1a import torch a 61 torch rand 3 4 产生一个3行4列的0 1的随机Tensor b 61 torch zeros like a 产生
  • mybatis 事务 | 动态SQL | 多表查询

    四 xff0c Mybatis连接池和事务深入 1 连接池 在 WEB 课程中学习过连接池技术 xff0c 而在 Mybatis 中也有连接池技术 xff0c 但是它采用的是自己的连接池技术 在 Mybatis 的主配置文件中 xff0c
  • mybatis延迟加载 | 缓存机制详解

    八 xff0c Mybatis延迟加载 1 概念 延迟加载 xff1a 就是在需要用到数据时才进行加载 xff0c 不需要用到数据时就不加载数据 延迟加载也称懒加载 好处 xff1a 先从单表查询 xff0c 需要时再从关联表去关联查询 x
  • mybatis 注解开发版

    十 xff0c myBatis纯注解开发 1 常用注解 64 Insert 实现新增 64 Update 实现更新 64 Delete 实现删除 64 Select 实现查询 64 Result 实现结果集封装 64 Results 可以与
  • Mybatis 逆向工程的使用

    文章目录 1 逆向工程简介2 逆向工程的配置1 xff09 创建数据库2 xff09 添加pom文件坐标3 xff09 编写generatorConfig xml配置4 xff09 生成对应代码 3 逆向工程的使用1 xff09 基本查询的
  • pageHelper分页技术

    十二 xff0c pageHelper分页技术 1 分页简介 PageHelper 是 MyBatis 中非常方便的第三方分页插件 2 官方文档 xff1a https github com pagehelper Mybatis PageH
  • IDEA中无法连接mysql数据库

    问题 我们在学习Mybatis时需要连接Mysql数据库 xff0c 使用IDEA无法连接mysql数据库 原因 我们IDEA中没有对应的MySQL的驱动jar xff0c 导致无法连接上数据库 解决方法如下 xff1a 解决 第一步 xf
  • Typora的使用 和 自定义属性 | 快捷键

    1 Typora介绍 xff1a Markdown是一种轻量级标记语言 通过简单的标记语法 xff0c 它可以使普通文本内容具有一定的格式 所谓轻量级标记语言指的是一类用简单句法描述简单格式的文本语言 通俗来讲就是我们可以通过很简单的几行代
  • Lombok的使用及其原理

    Lombok简介说明 xff1a Lombok是一款Java开发插件 使得Java开发者 可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码 尤其对于简单的Java模型对象 POJO 在开发环境中使用Lombok插件后 xff0c J
  • IOC理论推导

    IOC理论推导 1 UserDao 接口 2 UserDaoImpl 实现类 3 UserService业务接口 4 UserServiceImpl业务实现类 在我们之前的业务中 xff0c 用户的需求可能会影响我们原本的代码 xff0c
  • IDEA报: Lombok Requires Annotation Processing

    1 问题描述 IDEA使用lombok 提示 Lombok Requires Annotation Processing Annotation processing seems to be disabled for the project
  • PyTorch:torch.Tensor.unsqueeze()、squeeze()

    目录 1 unsqueeze 2 squeeze 1 unsqueeze 作用 xff1a 给指定的tensor增加一个指定 之前不存在的 的维度 通常用在两tensor相加 xff0c 但不满足shape一致 xff0c 同时又不符合广播
  • IDEA Error during artifact deployment. See server log for details.

    1 问题所在 Artifact ssmbuild war exploded Error during artifact deployment See server log for details 遇到这样的问题 xff0c 可能就是依赖没有
  • org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned

    1 报错 org apache ibatis exceptions TooManyResultsException Expected one result or null to be returned by selectOne 2 原因 在
  • springmvc入门案例 | 流程图分析

    一 xff0c springmvc基本概念 1 三层架构 开发架构一般基于两种形式 xff0c 一种是c s架构 xff0c 也就是客户端服务器 xff0c 另一种是b s架构 xff0c 也就是浏览器服务器 javaee的开发基本都是b
  • JSON的使用 | Jackson | FastJson

    JSON 什么是JSON JSON xff08 JavaScript Object Notation NS对象标记 xff09 是一种轻量级的数据交换格式 xff0c 目前使用特别广泛 采用完全独立于编程语言的文本格式来存储和表示数据 简洁

随机推荐

  • springmvc注解 | JSON | Restful | 结果视图

    一 常用注解 1 64 RequestParam 作用 xff1a 可以把请求参数传递给请求方法 属性 xff1a value xff1a 请求参数中的名称 required xff1a 请求参数中是否必须提供此参数 默认值 xff1a t
  • springmvc文件上传与下载 | 拦截器 | 异常处理 | 国际化

    一 springmvc的文件上传和下载 1 准备工作 文件上传是项目开发中最常见的功能之一 xff0c springMVC 可以很好的支持文件上传 xff0c 但是SpringMVC上下文中默认没有装配 MultipartResolver
  • JavaScript:操作 BOM 和 DOM

    浏览器说明 由于JavaScript的出现就是为了能在浏览器中运行 xff0c 所以 xff0c 浏览器自然是JavaScript开发者必须要关注的 目前主流的浏览器分这么几种 xff1a IE 6 11 xff1a 国内用得最多的IE浏览
  • Ajax的使用

    1 简介 AJAX 61 Asynchronous JavaScript and XML xff08 异步的 JavaScript 和 XML xff09 AJAX 是一种在无需重新加载整个网页的情况下 xff0c 能够更新部分网页的技术
  • 设置ItelliJ IDEA里修改jsp不重启tomcat

    设置ItelliJ IDEA里修改jsp不重启tomcat On Upate Action 与 On Frame Deactivation 这两个选项的设置 xff0c 依赖于 项目的部署方式 是war包 还是 exploded xff0c
  • SSM图书管理系统 - Spring+Springmvc+Mybatis(含数据库及分页)

    项目起源 通过一段时间对SSM整合的学习 xff0c 对基本理论以及主要知识点的掌握 xff0c 实现简易图书管理系统 xff0c 当然肯定有很多可以改进的地方 之前没有记录SSM整合的过程 xff0c 这次刚好项目有更深刻的理解 以前解决
  • PyTorch:torch.clamp()用法详解

    函数定义 xff1a torch clamp input min max out 61 None 作用 xff1a 限幅 将input的值限制在 min max 之间 xff0c 并返回结果 out Tensor optional 输出张量
  • SSM酒店预订客房管理系统(包含数据库及项目说明)

    hotel 预订宾馆客房入住管理系统 SSM项目 项目下载 xff1a https download csdn net download weixin 45606067 12673204 功能简介 前台给用户界面展示信息 xff0c 以及查
  • resultMap | ssociation | collection具体说明及演示

    1 resultMap 的基本配置项 属性 id 属性 xff1a resultMap 的唯一标识 xff0c 此 id 值用于 select 元素 resultMap 属性的引用 type 属性 xff1a 表示该 resultMap 的
  • @Autowired注解与@Resource注解的区别

    Spring不但支持自己定义的 64 Autowired注解 xff0c 还支持由JSR 250规范定义的几个注解 如 xff1a 64 Resource 64 PostConstruct及 64 PreDestroy 64 Resourc
  • 轻松聊 Maven 的全面学习

    一 Maven介绍 1 什么是maven Maven 是一个项目管理工具 xff0c 它包含了一个 项目对象模型 POM xff1a Project Object Model xff0c 一组标准集合 xff0c 一个项目生命周期 Proj
  • Vue:前端体系、前后端分离

    1 概述 Vue 读音 vju xff0c 类似于 view 是一套用于构建用户界面的渐进式框架 xff0c 发布于 2014 年 2 月 与其它大型框架不同的是 xff0c Vue 被设计为可以自底向上逐层应用 Vue 的核心库只关注视图
  • Vue:MVVM模式和第一个Vue程序

    什么是 MVVM MVVM xff08 Model View ViewModel xff09 是一种软件架构设计模式 xff0c 由微软 WPF xff08 用于替代 WinForm xff0c 以前就是用这个技术开发桌面应用程序的 xff
  • Vue:基础语法

    文章目录 v bindv if v elsev else ifv forv onv on clickv on keydownv on mouseover v text与v htmlv model v bind 我们已经成功创建了第一个 Vu
  • Vue:表单双绑、组件

    什么是双向数据绑定 Vue js 是一个 MVVM 框架 xff0c 即数据双向绑定 xff0c 即当数据发生变化的时候 xff0c 视图也就发生变化 xff0c 当视图发生变化的时候 xff0c 数据也会跟着同步变化 这也算是 Vue j
  • Vue:Axios异步通信、生命周期

    什么是Axios Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架 xff0c 她的主要作用就是实现 AJAX 异步通信 xff0c 其功能特点如下 xff1a 从浏览器中创建 XMLHttpRequests从 no
  • mysql架构简介、及linux版的安装

    一 mysql的架构介绍 1 mysql简介 1 概述 MySQL是一个关系型教据库管理系统 xff0c 由瑞典MySQL AB公司开发 xff0c 目前属于Oracle公司 MySQL是一种关联歌据库管理系统 xff08 RDBMS xf
  • PyTorch:torch.sort()

    作用 xff1a 对给定tensor的指定维度进行排序 xff0c 返回排序后的结果和排序后的值对应原来维度位置的序号 举例说明 xff1a import torch a 61 torch randint 2 10 6 4 创建shape为
  • mysql索引、索引优化(这一篇包括所有)

    二 索引优化分析 1 性能下降SQL慢 执行时间长 等待时间长 查询语句写的烂索引失效 单值复合 关联查询太多Join xff08 设计缺陷或不得已的需求 xff09 服务器调优及各个参数设置 xff08 缓冲 线程数等 xff09 2 常
  • 查询截取分析

    三 查询截取分析 1 查询优化 1 永远小表驱动大表 xff0c 类似嵌套循环Nested Loop Case EXISTS SELECT FROM table WHERE EXISTS subquery 该语法可以理解为 xff1a 将主