mysql 先子查询过滤再联合 和 先联合再过滤 执行效率问题

执行顺序

  1. 先子查询过滤再联合
SELECT  XXX  FROM(select * from edw_data_dyd.overrun_offsite_info WHERELENGTH( VEHICLE_ID ) >= 12 AND CREATED_TIME >= DATE_ADD(NOW(),INTERVAL -1 HOUR)AND CREATED_TIME < NOW()AND VEHICLE_ID not like '%无车牌%'AND VEHICLE_ID not like '%无法识别%'AND a.VEHICLE_TYPE_ID = '1'AND VEHICLE_TYPE_ID in('1',"11","12","13","14","15","16")) aLEFT JOIN edw_data_eda.global_vehicle b ON RIGHT ( a.VEHICLE_ID, 7 ) = b.plate_number and LEFT(a.VEHICLE_ID,1) = LEFT(b.PLATE_COLOR_NAME,1)LEFT JOIN edw_data_dyd.sys_station c ON a.STATION_IP = c.stationcode inner join ( select *  from overrun_offsite_info_response where  CREATED_TIME >= DATE_ADD(NOW(),INTERVAL -1 HOUR) AND CREATED_TIME < NOW() ) as ooir on a.unique_id = ooir.unique_id
WHEREc.regionalcode IS NOT NULLAND c.regionalname IS NOT NULLand ooir.flag = 1  

这种方式是,overrun_offsite_info 、overrun_offsite_info_response 先过滤数据,然后再进行联合查询(预处理)

  1. 先联合再过滤
SELECT  XXX  FROMedw_data_dyd.overrun_offsite_info a LEFT JOIN edw_data_eda.global_vehicle b ON RIGHT ( a.VEHICLE_ID, 7 ) = b.plate_number and LEFT(a.VEHICLE_ID,1) = LEFT(b.PLATE_COLOR_NAME,1)LEFT JOIN edw_data_dyd.sys_station c ON a.STATION_IP = c.stationcode inner join overrun_offsite_info_response as ooir on a.unique_id = ooir.unique_id
WHERELENGTH( a.VEHICLE_ID ) >= 12 AND a.CREATED_TIME >= DATE_ADD(NOW(),INTERVAL -1 HOUR)AND a.CREATED_TIME < NOW()AND ooir.CREATED_TIME >= DATE_ADD(NOW(),INTERVAL -1 HOUR)AND ooir.CREATED_TIME < NOW()AND a.VEHICLE_ID not like '%无车牌%'AND a.VEHICLE_ID not like '%无法识别%'AND a.VEHICLE_TYPE_ID in('1',"11","12","13","14","15","16")AND c.regionalcode IS NOT NULLAND c.regionalname IS NOT NULLand a.unique_id is not nulland ooir.flag = 1 

这种方式:数据库表先进行联合查询,形成自然连接,再进行条件过滤
在这里插入图片描述

通过explain查询后,得到的执行顺序,过滤条数是一致的。
因此以上两种方式执行时间是一样的,这两种写法被mysql查询优化器优化后,应该是一样执行顺序。

执行时间

  1. 在overrun_offsite_info_response 没有添加过滤条件是,执行时间是1000多秒,因为overrun_offsite_info_response 的数据量是300多万条数据,因此自然连接后的数据量特别的大。
  2. 解决方法; 给 overrun_offsite_info_response 添加 CREATED_TIME字段,过滤数据后,sql的执行时间从1000多秒提升到5秒,极大地优化了查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac中maven配置安装路径

Mac中maven配置安装路径 没有下载maven的可以先下载&#xff1a;&#xff08;这里建议maven版本不要下高了&#xff09; 如果你的bash_profile中没有配置JAVA_HOME路径&#xff0c;可以按照下面的命令配置一下 获取JAVA的安装路径&#xff1a; /usr/libexec/java_home -V …

Pycharm2024最新版community社区版下载安装配置,快速上手

第一步&#xff1a;下载 方法1&#xff1a;官网链接 https://www.jetbrains.com/pycharm/download/?sectionwindows .方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ic2N5hUQ2m1Kmyr5nK9Jxw?pwd76dt 提取码&#xff1a;76dt --来自百度网盘超级…

利用Nodejs-express框架调取python脚本

1.使用child_process 子进程 中的 execFile child_process 子进程 | Node.js v20 文档 (nodejs.cn) 官方文档 1-1安装child_process npm install child_process 1-2 在接口文件中使用 var express require(express); var router express.Router(); const { execFile } …

接口自动化测试框架实战-2-项目接口文档

上一小节我们完成了项目开发环境的搭建&#xff0c;本小结我们具体介绍一下项目中使用到的接口文档。 本次我们以钉钉开放接口作为项目接口测试的示例&#xff0c;方便大家都能统一学习和调用&#xff0c;具体接口如下&#xff1a; 1、获取企业内部应用的access_token 在获取…

poi库简单使用(java如何实现动态替换模板Word内容)

目录 Blue留言&#xff1a; Blue的推荐&#xff1a; 什么是poi库&#xff1f; 实现动态替换 第一步&#xff1a;依赖 第二步&#xff1a;实现word模板中替换文字 模板word&#xff1a; 通过以下代码&#xff1a;&#xff08;自己建一个类&#xff0c;随意取名&#xf…

(8) ubuntu ROS 安装

文章目录 安装流程1. 进入ros官网2. 根据自己ubuntu系统选择版本&#xff08;我是20.04的ubuntu&#xff09;3.根据流程开始安装3.1 设置sources.list 4.验证ros5.安装rosdep 安装流程 1. 进入ros官网 https://www.ros.org/ 2. 根据自己ubuntu系统选择版本&#xff08;我是2…

微信小程序反编译工具安装【PC端程序包详解】

文章目录 **准备工具****第一步&#xff1a;配置反编译工具****第二步&#xff1a;解密小程序包****第三步&#xff1a;准备Node.js环境****第四步&#xff1a;反编译小程序包****第五步&#xff1a;使用微信开发者工具** 微信小程序已经成为现代应用开发的一个重要部分。如果你…

基本的DQL语句-单表查询

一、DQL语言 DQL(Data Query Language 数据查询语言)。用途是查询数据库数据&#xff0c;如SELECT语句。是SQL语句 中最核心、最重要的语句&#xff0c;也是使用频率最高的语句。其中&#xff0c;可以根据表的结构和关系分为单表查询和多 表联查。 注意&#xff1a;所有的查询…

ORB_SLAM2 ORBSLAM2 Ubuntu20.04 ROS Noetic虚拟机镜像下载

下图是build.sh 和 build_ros.sh 编译完成截图&#xff1a; slam测试视频: orbslam2 ubuntu20.04 test 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/16R7Pb6LjgR5SeoeBSZfgaQ?pwdu05r 提取码&#xff1a;u05r

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 接上一篇文章FastAPI&#xff08;六十六&#xff09;实战开发《在线课程学习系统》接口开发--用户注册接口开发。这次我们分享实际开发--用户登陆接口…

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现GA-Transformer-LSTM多变量回归预测&#xff0c;遗传优化算法&#…

Linux中用shell脚本实现用户注册,登录,删除特点

一、说明 Linux中用shell脚本实现用户注册&#xff0c;登录&#xff0c;删除特点&#xff1a;用户和密码是单另储存在一个文件中&#xff0c;程序结束后&#xff0c;下次登录只要存储用denglu.sh 主目录 denglu1.sh 注册功能模块 denglu2.sh 登录功能模块 denglu3.sh…

C++ 双指针与链表

链表中的一些题目可以用双指针解决&#xff0c;我们将这些题目与其他双指针题目做了总结。 非链表题目 替换数字 给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#xff0c;而将每个数字字符替…

书生大模型实战营闯关记录----第二关:实现word_count统计文本中word频次

实现word_count统计文本中word频次 请实现一个wordcount函数&#xff0c;统计英文字符串中每个单词出现的次数。返回一个字典&#xff0c;key为单词&#xff0c;value为对应单词出现的次数。 Eg: Input: """Hello world! This is an example. Word coun…

每日刷题记录(codetop版)

7.21 7.22 7.23 复习7.21和7.22

读书的意义

文章目录 引言什么是热恋的人常做的事?写作是什么样的过程?什么是人生的转折点?人生的答案是什么?为什么很多人宁愿痛苦也不改变?回望过去常有的感受是什么?女人可以活成哪种样子?为什么不能轻言放弃?有没有做一件事“最完美的时刻”?如何生活得有滋有味?为什么要尝试…

Eureka在Kubernetes中的部署指南:微服务发现的艺术

标题&#xff1a;Eureka在Kubernetes中的部署指南&#xff1a;微服务发现的艺术 在当今快速发展的云计算时代&#xff0c;微服务架构因其灵活性和可扩展性而受到青睐。Eureka&#xff0c;作为Netflix开源的服务发现框架&#xff0c;已成为微服务架构中的一个关键组件。然而&am…

并发情况导致事务失效的场景

public void test(Pageable request){for (int i 0; i < 100; i) {//新建线程处理new Thread(() -> {userInfoService.testDemo();}).start();} } 这里创建多个线程模拟多并发场景 Transactional(rollbackOn Exception.class) public synchronized void testDemo() {…