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

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

谓词

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

相关文章:

  • BugKu练习记录:ok
  • NCNN入门之编译与安装
  • java虚拟机知识分享与汇总
  • 【Hexo系列】【6】NexT主题使用
  • java程序CUP持续飙高
  • 视觉辅助应用场景
  • RocketMQ学习(二)
  • 【JavaSE系列】Java概述
  • WebStorm 安装教程及免费使用或试用的方法
  • 【MySQL】用户管理
  • C++的基准测试
  • 基于Python的机器学习系列(17):梯度提升回归(Gradient Boosting Regression)
  • 如何构建基于Java SpringBoot的医疗器械管理系统?四步详解从需求分析到系统部署,集成Vue.js提升用户体验,内含MySQL数据库管理技巧。
  • 基于STM32开发的智能电力监控与管理系统
  • 为什么生成设备号过后,还要去板子mknod /dev/led c 11 0来生成设备文件呢?
  • 【设计模式】代理模式
  • 为什么在JDBC中使用PreparedStatement?
  • 深度学习100问28:什么是RNNLM(RNN语言模型)
  • 浪潮信息携区域ISP伙伴,共创AI应用新生态
  • 企业级web服务实战 (模拟)(一