问题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万数据的表建立了临时表,且做了一次排序操作

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

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

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条记录,所以处理耗时非常少

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

三张关联表,大表;单次查询耗时400s,有group by order by 如何优化的更多相关文章

  1. mysql结构相同的三张表查询一条记录\将一张表中的数据插入另外一张表

    将一张表中的数据插入另外一张表 1.两张表结构相同 insert into 表1名称 select * from 表2名称 2.两张结构不相同的表 insert into 表1名称(列名1,列名2,列 ...

  2. 如何优化MySQL千万级大表

    很好的一篇博客,转载 如何优化MySQL千万级大表 原文链接::https://blog.csdn.net/yangjianrong1985/article/details/102675334 千万级 ...

  3. 走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串

    原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千 ...

  4. switch...case...语句分析(大表跟小表何时产生)

    一.switch...case...的格式 switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; break; case 常量表达式3: 语句; ...

  5. Oracle中创建千万级大表归纳

    从一月至今,我总共归纳了三种创建千万级大表的方案,它们是: 下面是这三种方案的对比表格: # 名称 地址 主要机制 速度 1 在Oracle中十分钟内创建一张千万级别的表 https://www.cn ...

  6. MySQL8.0大表秒加字段,是真的吗?

    前言: 很早就听说 MySQL8.0 支持快速加列,可以实现大表秒级加字段.笔者自己本地也有8.0环境,但一直未进行测试.本篇文章我们就一起来看下 MySQL8.0 快速加列到底要如何操作. 1.了解 ...

  7. mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  8. 【mysql】mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  9. Django:常用字段、手动自动第三张表单、元信息

    一.常用字段和非常用字段 二.手动,自动创建第三张表 三.元信息 四.defer和only 一.常用字段和非常用字段 -常用字段 AutoField int自增列,必须填入参数 primary_key ...

随机推荐

  1. MVC ValidationAttribute 验证一个字段必须大于另一个字段

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)] pu ...

  2. CTF-SMB渗透

    环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.103  靶场下载: 链接:https://pan.baidu.com/s/1OwNjBf7ZEGmFlRq ...

  3. PHP compact

    1.函数的作用:将变量转成数组 2.函数的参数: @params string $varname1 @params string $varname2 ... @params array $varnam ...

  4. [JOYOI1510] 专家复仇 - Floyd

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目背景 外星人完成对S国的考察后,准备返回,可他们的飞碟已经没燃料了……S国的专家暗自窃喜 ...

  5. Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现

    介绍 之前Spring Cloud Config基础篇这篇文章介绍了Spring Cloud Config 配置中心基础的实现,今天继续聊下Spring Cloud Config 并结合nacos做服 ...

  6. MOOC python笔记(三) 序列容器:字符串、列表、元组

    容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器,如:字符串.列表. 通用序列容器操作 容器连接+ 加号可以把两个序列连接成一个更大的容器,相加后两个序列的值并不 ...

  7. mysql 堆注入写shell

    如果一个平台有注入点的时候可以通过写一句话拿shell 条件 1.myql 5.6.34 版本区分 2.有写的权限 3.知道绝对路径 MySQL 中 在在mysql 5.6.34版本以后 secure ...

  8. Windows突破远程连接最大数去掉限制登录

    当对方设置最大连接数 超过限制时 可以用这个命令 win+r  输入 mstsc /v:192.168.18.131:3389 /console   windows server 2003 sp2 以 ...

  9. WSL捣鼓记——图形化(以emacs为例)

    前言 这学期开始学习linux,但笔记本装了双系统之后指纹识别会失效,开虚拟机又十分占据内存,于是乎基本需要使用linux的时候就用wsl,可奈何只有命令行界面,在需要使用图形软件(如emacs)的时 ...

  10. electron打包分发

    原始的方式打包 下载对应的版本号的Release Electron 然后把对应的项目方便整理成这样的目录结构(Windows下) node_modules重新安装,不然可能启动失败 把整文件夹给别人就 ...