大数据查询优化之谓词下推 ?

news2024/11/16 11:48:15

谓词

谓词,可以理解为条件表达式,在SQL中,谓词就是返回Boolean值,即True或False的函数,或是隐式转换为Boolean的函数。SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS其结果为布尔值,即True或False。在SELECT语句的WHERE子句或HAVING子句中,确定哪些行与特定查询相关的条件或者函数。

下推

下推,即将谓词调整到数据源头或者靠近数据源头。
所谓下推,即谓词过滤在MAP端执行;所谓不下推,即谓词过滤在REDUCE端执行。

谓词下推

谓词下推(Predicate push down)又叫过滤条件下推(Filter push down)还叫 索引下推,就是让尽可能多的判断条件更贴近数据的源头,以使查询时能够跳过无关数据,从而提升查询性能。用在SQL优化上来说,就是先过滤再做聚合等操作。
谓词下推,也就是将过滤表达式下推到存储层直接过滤数据,减少传输到计算层的数据量。

谓词下推的步骤

(1). 解析查询语句,提取谓词。
(2). 评估谓词,确定其返回值的范围。
(3). 将谓词的结果推送到数据源头,以便在执行查询时减少数据传输和计算的开销。

场景说明

以下通过谓词下推,将SQL精选优化,会大大的提升了查询的性能。

优化前:
SELECT COUNT(*) FROM A JOIN B ON A.ID = B.ID WHERE A.A > 10 AND B.B < 100;
优化后:
SELECT COUNT(*) FROM (SELECT *  FROM A  WHERE A > 10) A1 
JOIN ( SELECT *  FROM B  WHERE B < 100 ) B1 ON A1.ID = B1.ID;

HIVE中的谓词下推

PPD规则:
(1). JOIN条件中的过滤,不能下推到保留行表中。
(2). WHERE条件过滤,不能下推到NULL补充表中。
具体描述来说:
(1). 对于Join(Inner Join)、Full outer Join,条件写在ON后面,还是WHERE后面,性能上面没有区别。
(2). 对于Left outer Join ,右侧的表的条件写在ON后面、左侧的表的条件写在WHERE后面,性能上有提高。
(3). 对于Right outer Join,左侧的表的条件写在ON后面、右侧的表的条件写在WHERE后面,性能上有提高。
(4). 当条件分散在两个表时,谓词下推可按上述结论2和3自由组合。
(5). 如果在条件表达式中含有不确定函数,整个表达式的谓词将不会被下推,如:UNIX_TIMESTAMP() 和 RAND()。

SELECT A.* FROM A JOIN B ON A.ID = B.ID WHERE A.DS = '2022-08-15' AND A.CREATE_TIME = UNIX_TIMESTAMP();

在这里插入图片描述

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

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

相关文章

NASA数据集:ASO L4雷达雪神数据集

目录 简介 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ASO L4 Lidar Snow Depth 50m UTM Grid V001 简介 该数据集包含根据机载光探测和测距仪&#xff08;或称激光雷达&#xff09;对地表高程的测量得出的 50 米网格雪深。 这些数据是 NASA/JPL 机载雪地观测…

如何构建基于Java SpringBoot的医疗器械管理系统?四步详解从需求分析到系统部署,集成Vue.js提升用户体验,内含MySQL数据库管理技巧。

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

采购管理流程:自动化如何使效率提升75% ?

与许多业务流程一样&#xff0c;采购到付款 (P2P) 流程也面临着潜在错误、可避免的成本支出以及可能导致的延误。目前&#xff0c;实现自动化的采购流程比例尚不足一半。 自动化在工作场所的应用具有深远的影响&#xff0c;其重要性不言而喻。对于某些企业而言&#xff0c;自动…

android openGL ES详解——面剔除

一、什么是面剔除&#xff1f; 1.面剔除 尝试在头脑中想象一下有一个3D立方体&#xff0c;你从任何一个方向去看它&#xff0c;最多可以同时看到多少个面。如果你的想象力不是过于丰富&#xff0c;你最终最多能数出来的面是3个。你可以从一个立方体的任意位置和方向上去看它&…

金融上云方案中,国产虚拟化产品选型的重点考虑因素、自动化运维建设步骤及如何进行保障数据中心安全需求的存储设计等问题及解决方法|金融行业数字化QA合集③

Q&#xff1a;金融机构应该从哪些方面考虑虚拟化产品选型&#xff1f; 我行是中小规模城商行&#xff0c;想实现虚拟化国产替换&#xff0c;针对国产虚拟化种类繁多的情况&#xff0c;我行应该从哪些方面考虑产品选型&#xff0c;确保所选择产品既能满足信创替换&#xff0c;又…

银河麒麟v10-sp3-x86系统安装k8s-1.30.4

X86-64和arm架构的区别 x86-64架构&#xff1a; 设计理念&#xff1a;x86-64架构起源于Intel的x86架构&#xff0c;并对其进行了64位扩展。这种架构的设计侧重于高性能和灵活性&#xff0c;适合处理复杂的计算任务。 性能特点&#xff1a;x86-64架构的处理器通常提供高性能的…

六个方面探讨企业为何迫切需要替换FTP

随着信息技术的迅猛发展和网络安全形势的日趋严峻&#xff0c;传统的FTP文件传输协议因其固有的局限性和安全隐患&#xff0c;逐渐难以满足现代企业的需求。因此&#xff0c;寻找并升级FTP替代方案成为众多企业需要解决的问题。本文将从六个方面探讨企业为何迫切需要替换FTP。 …

云轴科技ZStack产品升级,浙江分公司产品发布会成功举办

近日&#xff0c;以“智启未来&#xff0c;云端共赢”为主题的云轴科技ZStack浙江分公司针对浙江地区渠道合作伙伴的产品发布会在杭州顺利召开。ZStack总代理伟仕佳杰、神州数码、英迈等百余位合作伙伴代表出席会议&#xff0c;共同见证ZStack在云基础设施与AI软件基础设施领域…

易查分如何查询图片?

最近经常看到老师们各种分享和讨论一个问题&#xff0c;今天&#xff0c;我就和大家聊聊如何高效地在易查分平台上上传和管理图片&#xff0c;让查询结果更加直观。 首先准备你的图片&#xff0c;无论是获奖证书还是奖状&#xff0c;确保它们的格式正确&#xff0c;比如"2…

VMware虚拟机安装的Ubuntu,桥接方式静态ip,内网可以访问,ping外网不可用

1.环境说明 系统&#xff1a;Ubuntu 24.04 环境&#xff1a;VMware下桥接静态IP设置 2.问题&#xff1a;ping www.baidu.com报错 [~] ping www.baidu.com ping: www.baidu.com: Temporary failure in name resolutio…

十、前后端分离通用权限系统(10)

&#x1f33b;&#x1f33b; 目录 一、功能说明二、部门管理三、岗位管理四、日志管理4.1、登录日志4.1.1、功能实现- 接口4.1.2、编写 AsyncLoginLogMapper4.1.3、功能实现- 接口实现4.1.4、导入获取ip地址的工具类 IpUtil4.1.5、在 TokenLoginFilter 调用方法实现4.1.6、修改…

【Matlab】时间序列模型(ARIMA)

文章目录 前言一、示例二、代码实现----Matlab全部数据的平稳性检验ADF检验图检验法 划分训练集平稳性检验确定 p&#xff0c;q结果分析和模型检验模型预测 前言 接上一篇博客&#xff0c;用 Matlab 完成代码编写。 【学习笔记】时间序列模型(ARIMA) 一、示例 已知一个上市公…

Linux云计算 |【第二阶段】SHELL-DAY4

主要内容&#xff1a; grep、egrep的使用&#xff0c;基本/扩展正则、sed的使用&#xff08;非交互、逐行处理、常用命令与选项&#xff09; 补充&#xff1a;grep [-E]选项&#xff0c;表示允许使用扩展的正则表达式&#xff08;同等于egrep&#xff09; 一、grep 与 egrep 的…

Kubernetes高可用部署

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

极限的性质【上】《用Manim可视化》

通过前面的极限的定义&#xff0c;现在是计算极限的时候了。然而&#xff0c;在此之前&#xff0c;我们需要一些极限的性质&#xff0c;这将使我们的工作变得简单一些。我们先来看看这些。 极限的性质&#xff1a; 1.常数对极限的影响 1.首先&#xff0c;我们假设和存在&…

Tengine框架之配置表的Luban转换与加载

对于一个游戏来说&#xff0c;配置表是必不可少的&#xff0c;而且文件数量还比较多&#xff0c;像活动、任务成就、图鉴、地图、皮肤、本地化语言、技能等等之类。配置表一般使用Excel格式&#xff0c;便于策划来配置。但游戏中一般使用txt/json/xml/二进制格式文件&#xff0…

碎碎念之Android中CPU架构arm-v8a、arm-v7a、x86

0 碎碎念 之前写博客都是为了复习基础知识&#xff0c;不过好像也忘得很快hh。 以后估计会写点感兴趣的自己碎碎念&#xff0c;缓解下emo的心情。&#xff08;不像之前的博客&#xff0c;这些博客不准备复现也不贴代码所以不一定对&#xff0c; 仅供个人参考 &#xff09; 现在…

Python酷库之旅-第三方库Pandas(111)

目录 一、用法精讲 486、pandas.DataFrame.count方法 486-1、语法 486-2、参数 486-3、功能 486-4、返回值 486-5、说明 486-6、用法 486-6-1、数据准备 486-6-2、代码示例 486-6-3、结果输出 487、pandas.DataFrame.cov方法 487-1、语法 487-2、参数 487-3、功…

鸿蒙项目签名配置

配置需要以下四个文件&#xff1a; 1. p12文件 2. csr文件 3. cer文件 打开AGC平台 点击申请调试证书 4. p7b文件 最后在项目中进行配置 配置项目的module.json5中

selenium使用指南

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概述 selenium是网页应用中最流行的自动化测试工具&#xff0c;可以用来做自动化测试或者浏览器爬虫等。官网地址为&#xff1a;相对于另外一款web自动化测试工…