当前位置: 首页 > article >正文

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

谓词

谓词,可以理解为条件表达式,在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.kler.cn/news/284440.html

相关文章:

  • 【王树森】RNN模型与NLP应用(9/9):Self-Attention(个人向笔记)
  • Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行
  • React滚动加载(无限滚动)功能实现
  • 23种设计模式之模版方法模式
  • 向量数据库Milvus源码开发贡献实践
  • UE5学习笔记18-使用FABRIK确定骨骼的左手位置
  • 《C++与新兴数据库技术的完美交互:开启高效数据处理新时代》
  • sort,uniq,wc,awk命令 (数据整理
  • 【软件测试专栏】认识软件测试、测试与开发的区别
  • Linux——命令行文件的管理(创建,复制,删除,移动文件,硬链接与软链接)
  • 纷享销客CRM渠道分销之多维度数据分析介绍
  • STM32 - 笔记3
  • mysql启动失败问题汇总
  • 黑马点评——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装
  • ES(Elasticsearch)可视化界面-浏览器插件
  • python-春游
  • 【Qt窗口】—— 对话框
  • 操作系统面试真题总结(二)
  • Mac下的压缩包和Win看到的不一样怎么办 Mac压缩后Win电脑看文件名会乱码
  • 利用Leaflet.js创建交互式地图:多种形状单个区域绘制
  • 揭秘!糖尿病:从绝望到希望的治愈之路
  • mysql实用系列:coalesce函数的使用
  • 【GIT】idea中实用的git操作,撤回commit,撤回push、暂存区使用
  • 一些好用的网站和api合集
  • 【Python机器学习】NLP词频背后的含义——隐性狄利克雷分布(LDiA)
  • JavaWeb - Maven
  • GMS——利用 ChatGPT 和扩散模型进行制造业革命
  • css-functions-图形函数
  • 08:Logic软件原理图添加元件
  • 【Java设计模式】指挥官模式:轻松编排复杂命令