MySQL优化派生表_sql优化-派生表与inner-join

2023-11-01

首先来说明一下派生表?

外部的表查询的结果集是从子查询中生成的.如下形式:

select ... from (select ....) dt

如上形式中括号中的查询的结果作为外面select语句的查询源,派生表必须指定别名,因此后面的dt必须指定。派生表和临时表差不多,但是在select语句中派生表比临时表要容易,因为派生表不用创建。

一个有关派生表优化的实例。

开发同事发来一个sql优化,涉及到4张表,表中的数据都不是很大,但是查询起来真的很慢。服务器性能又差,查询总是超时。

四张表的表结构如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Table: t_info_settingCreate Table: CREATE TABLE`t_info_setting` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`parent_key`varchar(32) NOT NULL,

`column_name`varchar(32) NOT NULL,

`column_key`varchar(32) NOT NULL,

`storage_way`tinyint(4) DEFAULT '0',

`check_way`tinyint(4) DEFAULT '0',

`remark`varchar(500) DEFAULT '',

`operator`varchar(128) DEFAULT '',

`status`int(11) DEFAULT '1',

`update_time`datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY(`id`),KEY`column_key` (`column_key`)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

t_info_setting

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Table: t_articles_statusCreate Table: CREATE TABLE`t_articles_status` (

`id`int(11) unsigned NOT NULLAUTO_INCREMENT,

`linkId`varchar(36) NOT NULL,

`column_key`varchar(32) NOT NULL,

`status`int(11) DEFAULT '50000',

`operator_time`timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY(`id`),KEY`article_status` (`linkId`,`column_key`)

) ENGINE=InnoDB AUTO_INCREMENT=22232 DEFAULT CHARSET=utf81 row in set (0.00 sec)

t_articles_status

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Table: t_article_operationsCreate Table: CREATE TABLE`t_article_operations` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`linkId`varchar(36) NOT NULL,

`column_key`varchar(32) NOT NULL DEFAULT '',

`type`varchar(16) DEFAULT '',

`operator`varchar(128) DEFAULT '',

`operator_time`timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY(`id`),KEY`article_operation` (`linkId`,`column_key`),KEY`operator_time` (`operator_time`)

) ENGINE=InnoDB AUTO_INCREMENT=23316 DEFAULT CHARSET=utf81 row in set (0.00 sec)

t_article_operations

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Table: t_articlesCreate Table: CREATE TABLE`t_articles` (

`id`int(11) unsigned NOT NULLAUTO_INCREMENT,

`linkId`varchar(36) DEFAULT NULL,

`source`int(11) DEFAULT '0',

`title`varchar(150) NOT NULL,

`author`varchar(150) NOT NULL,

`tags`varchar(200) DEFAULT NULL,

`abstract`varchar(512) DEFAULT NULL,

`content` mediumtext,

`thumbnail`varchar(256) DEFAULT NULL,

`sourceId`varchar(24) DEFAULT '',

`accessoryUrl`text,

`relatedStock`text,

`contentUrl`text,

`secuInfo`text,

`market`varchar(10) DEFAULT 'hk',

`code`varchar(10) DEFAULT '',

`updator`varchar(64) DEFAULT '',

`createTime`timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立时间',

`updateTime`timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY(`id`),UNIQUE KEY`linkId` (`linkId`)

) ENGINE=InnoDB AUTO_INCREMENT=15282 DEFAULT CHARSET=utf8

t_articles

上面四张表,由上面的自增字段的值可以知道表的数据并不是很大,最大的表也就2万多行,表中的索引情况已经一目了然。开发同学给出的sql语句如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

(SELECT

'daily' AScategory,

e.linkId,

e.title,

e.updateTimeFROM(SELECT DISTINCTb.column_key,

b. STATUS,

b.linkIdFROMt_info_setting ainner JOIN t_articles_status b ON a.column_key =b.column_keyinner JOIN t_article_operations c ON b.column_key =c.column_keyWHEREa.parent_key= 'daily'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1)ASdinner JOIN t_articles e ON d.linkId =e.linkId

)UNION ALL(SELECT

'ipo' AScategory,

e.linkId,

e.title,

e.updateTimeFROM(SELECT DISTINCTb.column_key,

b. STATUS,

b.linkIdFROMt_info_setting ainner JOIN t_articles_status b ON a.column_key =b.column_keyinner JOIN t_article_operations c ON b.column_key =c.column_keyWHEREa.parent_key= 'ipo'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1)ASdinner JOIN t_articles e ON d.linkId =e.linkId

)UNION ALL(SELECT

'research' AScategory,

e.linkId,

e.title,

e.updateTimeFROM(SELECT DISTINCTb.column_key,

b. STATUS,

b.linkIdFROMt_info_setting ainner JOIN t_articles_status b ON a.column_key =b.column_keyinner JOIN t_article_operations c ON b.column_key =c.column_keyWHEREa.parent_key= 'research'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1)ASdinner JOIN t_articles e ON d.linkId =e.linkId

)UNION ALL(SELECT

'news' AScategory,

e.linkId,

e.title,

e.updateTimeFROM(SELECT DISTINCTb.column_key,

b. STATUS,

b.linkIdFROMt_info_setting ainner JOIN t_articles_status b ON a.column_key =b.column_keyinner JOIN t_article_operations c ON b.column_key =c.column_keyWHEREa.parent_key= 'news'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1)ASdinner JOIN t_articles e ON d.linkId =e.linkId

)

开发给的sql

原sql很长大概有107行,但是分析这条sql发现了使用了三个union联合查询,然后每条联合的sql语句基本是一模一样的,只是改变了a.parent_key = 'research'这个条件。这说明我们只需要分析其中的一条sql即可。

SELECT

'research' AScategory,

e.linkId,

e.title,

e.updateTimeFROM( -- 这里使用了派生表SELECT DISTINCT --ab.column_key,

b. STATUS,

b.linkIdFROMt_info_setting ainner JOIN t_articles_status b ON a.column_key =b.column_keyinner JOIN t_article_operations c ON b.column_key =c.column_key -- cWHEREa.parent_key= 'research'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1)ASdinner JOIN t_articles e ON d.linkId = e.linkId -- b

首先:这条sql语句中使用了派生表,分析里面的子查询,最后有一个limit 1也就是只查出一条数据,并且是按照operator_time进行排序,那么distinct的去重复就是不需要的。再看子查询中查询出了三个字段,但是在b处和e表进行联合查询的时候只使用了linkId 这一个字段,因此子查询中多余的两个字段需要去掉。

在表t_article_operations上有一个符合索引,我们知道mysql在使用复合索引时,采用最左原则,因此在c处的联合查询我们需要加上linkId ,根据上面分析,改写sql如下:

select

'research' ascategory,

e.linkId,

e.title,

e.updateTimefrom(select b.linkId --去除不必要的列、distinct操作

fromt_info_setting ainner joint_articles_status bon a.column_key=b.column_keyinner joint_article_operations con b.linkId=c.linkId and b.column_key=c.column_key --关联条件应包含linkId

wherea.parent_key='research'

and a.status=1

and b.status=80000

order by c.operator_time desclimit1) dinner joint_articles eon d.linkId=e.linkId;

然后查看下改写前后两个sql的执行计划。

改写后的执行计划:

+----+-------------+------------+--------+-------------------+----------------+---------+-----------------------------------------------------------+-------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+------------+--------+-------------------+----------------+---------+-----------------------------------------------------------+-------+-------------+

| 1 | PRIMARY | | system | NULL | NULL | NULL | NULL | 1 | NULL |

| 1 | PRIMARY | e | const | linkId | linkId | 111 | const | 1 | NULL |

| 2 | DERIVED | c | index | article_operation | operator_time | 5 | NULL | 14711 | NULL |

| 2 | DERIVED | a | ref | column_key | column_key | 98 | wlb_live_contents.c.column_key | 1 | Using where |

| 2 | DERIVED | b | ref | article_status | article_status | 208 | wlb_live_contents.c.linkId,wlb_live_contents.c.column_key | 1 | Using where |

+----+-------------+------------+--------+-------------------+----------------+---------+-----------------------------------------------------------+-------+-------------+

改写之后的单个sql很快就有了结果,大概0.12秒就有了结束,而原来的sql会超时结束的。

在原sql语句中使用了union,因为我们最后的结果并不要求去重复,只是四个结果集的联合,因此这里我们可以使用union all代替上面的union。

改写后的执行计划DERIVED表示使用了派生表,我们看到在e表与派生表进行inner查询的使用了索引。

分析:

之前看到一种说法是,在数据表和派生表联合进行查询时,不能使用索引,但是上面的的执行计划说明使用了索引(e表和派生表联合查询,e表使用了索引)。【究竟要怎么用还需进一步研究】

改写sql:

上面使用了派生表,其实数据量比较大时,派生表的效率并不是很高的,上面的查询我们试着用4张表的联合查询来改写。

改写之后的sql如下:

SELECT

'research' AScategory,

e.linkId,

e.title,

e.updateTimeFROMt_info_setting aINNER JOIN t_articles_status b ON a.column_key =b.column_keyINNER JOIN t_article_operations c ON b.linkId =c.linkIdAND b.column_key =c.column_keyINNER JOIN t_articles e ON c.linkId =e.linkIdWHEREa.parent_key= 'research'

AND a. STATUS = 1

AND b. STATUS = 80000

ORDER BYc.operator_timeDESCLIMIT1

查看执行计划:

+----+-------------+-------+-------+-------------------+----------------+---------+-----------------------------------------------------------+------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+-------------------+----------------+---------+-----------------------------------------------------------+------+-------------+

| 1 | SIMPLE | c | index | article_operation | operator_time | 5 | NULL | 1 | NULL |

| 1 | SIMPLE | a | ref | column_key | column_key | 98 | wlb_live_contents.c.column_key | 1 | Using where |

| 1 | SIMPLE | b | ref | article_status | article_status | 208 | wlb_live_contents.c.linkId,wlb_live_contents.c.column_key | 1 | Using where |

| 1 | SIMPLE | e | ref | linkId | linkId | 111 | wlb_live_contents.c.linkId | 1 | NULL |

+----+-------------+-------+-------+-------------------+----------------+---------+-----------------------------------------------------------+------+-------------+

根据执行计划,这个inner join的执行计划是要比上面的使用派生表的执行计划要高一些。

说明:

1:在使用联合查询的时候,可以考虑联合查询的键上创建索引,效率可能会高点。

2:可以考虑在order by的键上创建索引。

3:根据数据可以知道,t_article_operations本质上是一个流水表,记录日志类信息,不应出现在日常查询中。解决此种查询的办法:operator_time保存在t_articles_status中,查询彻底移除t_article_operations,或临时方法:t_article_operations只保留短期数据,历史记录定期迁移至其他表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL优化派生表_sql优化-派生表与inner-join 的相关文章

  • vue首屏加载动画

    样式style
  • Codeforces Round #328 (Div. 2)(A B C D)

    Codeforces Round 328 Div 2 tags Codeforces 难得题目不难 结果比赛的时候C题差一分钟没交上去 不然怎么着都能涨个百来分啊 T T Codeforces Round 328 Div 2 A PawnC
  • c++ 实现邮件发送功能

    系列服务器开发 文章目录 系列服务器开发 前言 一 SMTP是什么 二 使用SMTP使用步骤 1 下载编译 命令行使用 2 代码实现 总结 前言 常用的电子邮件协议有SMTP POP3 IMAP4 它们都隶属于TCP IP协议簇 默认状态下
  • jquery获取所有选中checkbox的值

    代码如下 function depositAudit var ck input name checkName single checked var ids if ck length lt 1 alertShow 请最少选中一条信息 else
  • Element tree设置默认展开及选中

    设置默认展开 将default expanded keys的值设为node key的值对应的数组即可
  • 【clickhouse】ubuntu20安装clickhouse并用DBeaver远程管理

    文章目录 1 安装 2 配置 3 外部连接测试 4 相关概念 5 Reference 1 安装 使用Deb安装包 添加证书 sudo apt get install y apt transport https ca certificates
  • C/C++

    文章目录 学习内容提要 关于学习教材 推荐书籍或资料 这个课程我们怎么学 课程特色 C语言的重要性 从和编程相关的计算机基础开始 从计算机的组成谈谈程序的运行 代码是怎么变成程序的 不同的进制 不同的世界 程序和内存空间模型 打印地址示例
  • 基于量子遗传算法的函数寻优算法(matlab实现)

    8 1 理论基础 8 1 1 量子遗传算法概述 量子遗传算法 quantum genetic algorithm QGA 是量子计算与遗传算法相结合的产物 是一种新发展起来的概率进化算法 遗传算法是处理复杂优化问题的一种方法 其基本思想是模
  • Java中多线程向mysql插入同一条数据冲突问题

    目的 Java中多线程向mysql插入同一条数据冲突问题 环境 系统 win10 环境 idea 201901 一 问题 程序中会使用多线程读写数据库 在同一时刻多个线程插入相同主键的相同数据时 会直接报错 二 规避办法 由于需求是多个线程
  • 【Spring】Spring Security OAuth2 JWT 认证

    1 概述 Spring Security OAuth2 JWT 认证服务器配置 Spring Security OAuth2 JWT 资源服务器配置 Spring Security OAuth2 Redis 模式下认证服务器 Spri
  • RFID开发笔记 Alien阅读器文档

    1 开机使用serial connect 完成boot后使用TCP IP协议与主机通信 2 TagList 是一个活跃标签的列表 这里活跃的含义是在一个间隔里被监听到 如果一个标签之前没有被监听到 而在当前的 间隔里被监听到了 那么就将这个
  • 基于LSTM的诗词生成

    文章目录 前言 一 数据集介绍 二 实验代码 1 随机诗词生成 2 藏头诗生成 三 实验结果 1 随机诗词生成结果 2 藏头诗生成结果 总结 前言 本文的主要内容是基于LSTM的诗词生成 文中包括数据集的介绍 实验代码以及运行结果等 该实验
  • 2023【软件测试】面试题合集整理打包!大放送!!!

    跳槽求职 准备好一场面试不仅需要在简历上多下功夫 还需要为面试问答做好充足的准备 以下是 本人 从面试经验中收集的 然后分门别类整理了这套面试题 很具备参考性 毕竟都是企业真实面试题目 接下来 针对以下知识类型列出具体的面试点 其中包括笔试
  • 判断两个对象数组是否有相同元素,对象数组合并去重

    let arr name cat sex 0 name dog sex 0 name bat sex 0 let arr2 name cat sex 1 name dog sex 0 一 循环判断arr与arr2是否有相同元素 相同的添加i
  • 网络性能测试工具:iperf3

    一 iperf3简介 iperf3是一个网络性能测试工具 iperf3下载地址 iperf可以测试TCP和UDP带宽质量 iperf可以测量最大TCP带宽 具有多种参数和UDP特性 iperf可以报告带宽 延迟抖动和数据包丢失 iperf3
  • html中after伪类原理,理解:Before和:After伪元素

    CSS样式表的主要作用是修饰Web页面上的HTML标记 但有时候 为了实现某个效果而往页面里反复添加某个HTML标记很繁琐 或者是显得多余 或者是由于某种原因而做不到 这就是CSS伪元素 Pseudo Element 可以发挥作用的地方 所
  • 第二回:艺术画笔见乾坤

    文章目录 第二回 艺术画笔见乾坤 一 概述 1 matplotlib的三层api 2 Artist的分类 二 基本元素 primitives 1 2DLines a 如何设置Line2D的属性 b 如何绘制lines 2 patches a
  • Gitl用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner 解释

    Gitl用户在组中有五种权限 Guest Reporter Developer Master Owner 解释 Guest 可以创建issue 发表评论 不能读写版本库 Reporter 可以克隆代码 不能提交 QA PM可以赋予这个权限
  • 遥感图像语义分割比赛整理

    好久没有写博客了 最近有两篇论文的投稿 到年前就没啥时间 寒假期间参加了一个遥感图像分割的比赛 一次不是很成功的参赛 第一次参加这种比赛吧 过程十分坎坷 本来就是在初赛ddl前10天才找到队友 然后在成功组队的第三天 被队友鸽了 只剩下我c

随机推荐

  • 打破传统降噪技术 看网易云信在语音降噪的实践应用

    导读 随着音视频会议 娱乐互动直播 在线教育产品的火热发展 产品中令人愉悦的音效音质体验是必不可少的 文 飒飒 网易云信音视频算法工程师 但在音视频实时通信中 难免会遇到各种我们不希望出现的声音 例如电流声 键盘敲击声 嘈杂声等 这些统称为
  • mysql的一些操作

    修改mysql的字符集 在安装mysql5 0时可以设置好mysql的字符集 一般使用utf8的字符集 1 查看建立表 tablename 的sql语句 Show create table tablename 查看建立表 tablename
  • R数据类型

    2 2 1 向量向量是用于存储数值型 字符型或逻辑型数据的一维数组 执行组合功能的函数c 可用来创建向量 各类向量如下例所示 a lt c 1 2 5 3 6 2 4 b lt c one two three c lt c TRUE TRU
  • 多项式全家福(缺插值和点值)

    文章目录 写法 vector写有什么好处 vector写的时候注意什么 Dft 求逆 开二次根 取模 对数 前置技能 1 复合函数求导 2 ln函数求导 指数 前置技能 牛顿迭代 模板 写法 vector写有什么好处 1 分治NTT的时候不
  • 爬虫已经凉凉,再不学点数据分析,你真的Out了!

    不论你是运营 金融 产品 开发 数据分析能力不仅能够助力个人专业能力的提升 也可更加了解产品 在职场上走得更远 但市面上数据分析课普遍存在以下问题 乱 少 贵 所以 只要299的数据分析就业班 来了 价格优势 首期1折价仅需299元 内容全
  • [嵌入式开发模块]DS3231时钟芯片 驱动程序

    刚刚写完DS3231时钟芯片的驱动程序 这里开源出来供大家使用 需要的自取 先简单介绍下这个芯片 然后直接给驱动代码以及示例代码 DS3231简介 简介 DS3231是一款低成本 高精度I2C实时时钟 RTC 具有集成的温补晶体振荡器 TC
  • Java内存模型

    一 CPU的缓存结构 我们知道CPU的运算速度是很快的 因为从磁盘读取数据的速度严重影响着效率 所以才有了内存 但是即便是这样 内存的性能也远远跟不上CPU的运行速度 所以CPU的设计者开始在内部加入 高速缓存 SRAM 来解决CPU运算速
  • CPU性能测试分析MIPS、DMIPS

    一 what MIPS million instruction per second 表示每秒多少百万条指令 如 10MIPS 表示每秒一千万条指令 MIPS MHz 表示 CPU 在每 1MHz 的运行速度下可以执行多少个MIPS 如 1
  • 367W字!京东商城Java架构师设计的亿级高并发秒杀手抄笔记

    京东商城的亿级高并发秒杀系统到底是怎么设计的 我如果也想做一个电商APP该如何下手 带着这些问题 今天你将会在我这篇文章中找到答案 本篇将会从系统架构设计基本入门 数据库 缓存 消息队列 分布式服务 维护 实战 实操 这几个大的方面进行深入
  • Logstash将数据导入至MYSQL

    Logstash 版本 6 2 4 Logstash 经常做的事情 是将日志文件进行解析 并且导入至 ElasticSearch 中 但是目前碰到的问题是 怎么将数据导入至 DB 中 比如 MYSQL 这就需要下面这个神器了 JDBC ou
  • Ceph入门到静态-deep scrub 深度清理处理

    9 6 洗刷 REPORT DOCUMENTATION BUG 除了为对象创建多个副本外 Ceph 还可通过洗刷归置组来确保数据完整性 请参见第 1 3 2 节 归置组 了解有关归置组的详细信息 Ceph 的洗刷类似于在对象存储层运行 fs
  • 云计算的基础设施服务

    云计算 企业实施手册 中将云计算的基础设施即服务划分为3个类别 服务器服务 存储服务和网络连接服务 服务提供商可能会提供虚拟服务器实例 在这些实例上 用户可以安装和运行一个自定义的映像 持久性的存储是一种单独的服务 客户可以单独购买 最后
  • 【C语言】程序环境和预处理

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 一 编程常见的错误 二 程序的翻译环境和运行环境 1 翻译环境
  • 文字、字母以及数字的换行不换行问题总结

    实现页面的文字 字母的展示效果的时候 相信大家都会遇到过一些这样的要求 文字不能换行 要强制文字一行展示 或者是 字母不会自动换行 需要实现可以自动换行断句 等等诸如此类的要求 现在就这个文字 字母换不换行的问题 说说这三个css属性的巧妙
  • 产品冷思考:大而全or小而美如何选择?

    顾城诗曰 黑夜给了我黑色的眼睛 我却用它寻找光明 我喜欢黑夜 因为此时远离尘世的嘈杂 追求内心的宁静 躲进黑暗的角落里才真正的洞察内心 作为冒牌的产品经理 褪去一天的疲惫 没有繁琐的事务 不再面红耳赤的争论 不用违心的妥协 吹着凉风 冷静的
  • 请你说一下行级锁和表级锁的区别(或表级锁和行级锁的区别)

    本旨在学习记录 内容源自JavaGuide 作者在此基础上进行补充说明 整理论述 使其能以一种更为逻辑地清晰地方式表达出 请你说一下行级锁和表级锁的区别 的理解 更多适应于java面试回答 亦可作对请你说一下自己对行级锁和表级锁的简要了解
  • socket套接字与TCP连接

    如何标识一个TCP连接 对于TCP协议 成功建立一个新的链接 需要保证该TCPl连接中四个要素组合体的唯一性 客户端的IP 客户端的port 服务器端的IP 服务器端的port 服务器端的同一个IP和port 可以和同一个客户端的多个不同端
  • Python 数据处理之柱状图--Echarts

    一 读取数据并写入excel coding utf 8 import xlsxwriter def add series i j len data 0 1 chart col add series 这里的sheet1是默认的值 因为我们在新
  • 关于谷歌chrome浏览器以及360极速浏览器摄像头无法使用(摄像头权限)问题。

    问题描述 关于谷歌chrome浏览器以及360极速浏览器摄像头无法使用 摄像头权限 问题 在疫情期间 很多企业无法开展线下笔试 大多采用线上笔试的方法 当下两个主流的笔试网站 牛客网以及赛码网 企业会在这两个网站发布考试链接 通常牛客网可以
  • MySQL优化派生表_sql优化-派生表与inner-join

    首先来说明一下派生表 外部的表查询的结果集是从子查询中生成的 如下形式 select from select dt 如上形式中括号中的查询的结果作为外面select语句的查询源 派生表必须指定别名 因此后面的dt必须指定 派生表和临时表差不