mysql join 400秒_三张关联表,大表;单次查询耗时400s,有group by order by 如何优化...

本文主要是介绍mysql join 400秒_三张关联表,大表;单次查询耗时400s,有group by order by 如何优化...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题SQL:

select

p.person_id as personId,

p.person_name as personName,

p.native_place as nativePlace,

ci.company_name as companyName,

pp.seal_number as sealNumber,

GROUP_CONCAT(pp.major) as major,

pp.register_name as registerName

from qyt_person p

left join qyt_person_practising pp on p.person_id=pp.person_id

left join qyt_company_info ci on p.company_id=ci.company_id

group by p.person_id,pp.register_name

order by p.create_time desc

limit 1,10

SQL总耗时393秒,通过Explain分析,发现为200万数据的表建立了临时表,且做了一次排序操作

4a4b6bb11f9c981eaae773a4b06416d8.png

通过查看SQL运行分析,也看出来,构造临时表耗时106秒,排序用了285秒(没索引的排序慢)

9b5d2ccc217cfa3a26d40abcf4d6119a.png

解决思路:根据业务需求再次审视如何减少数据量

1、业务需求:最新人员可以先取出来10名

2、取出来后再关联查询他们所在企业,所获证书(有索引,查询快)

3、这种小的临时表排序的耗时就可以接受了

4、SQL语句有子查询功能,可以把200万的表数据缩减为10人的小表

SQL语句如下:

select

p.person_id as personId,

p.person_name as personName,

p.native_place as nativePlace,

p.create_time as createTime,

ci.company_name as companyName,

pp.seal_number as sealNumber,

GROUP_CONCAT(pp.major) as major,

pp.register_name as registerName

from (SELECT person_id, person_name, native_place,company_id ,create_time from qyt_person order by create_time desc limit 0,10) p

left join qyt_person_practising pp on p.person_id=pp.person_id

left join qyt_company_info ci on p.company_id=ci.company_id

group by p.person_id,pp.register_name

ORDER BY p.create_time desc

limit 0,10

结果完美!响应时间为0.017秒

通过Explain分析,临时表就10条记录,所以处理耗时非常少

2e670c960663761b84f18e28312c7f55.png

大块的时间还是损耗在构造临时表和排序上,但是这个时间必须得损失

e4d4f97a84c7ff7ed86f42e0e8560c92.png

这篇关于mysql join 400秒_三张关联表,大表;单次查询耗时400s,有group by order by 如何优化...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412358

相关文章

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API