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

Clickhouse查询语句执行过程

问题

简述clickhosue中一条select语句的执行过程,使用的引擎是ReplacingMergeTree。例如:

select col1,col2 from table final
prewhere col3 > ? and col4 = ? and col5 = ? -- col3为分区键,col4为二级索引,col5为主键字段
where col6 = ? 
order by col7;

回答

  1. 分区过滤。根据col3确定分区,这一步在内存中完成
  2. 一级索引过滤granularity。根据col5字段从分区中过滤出来符合条件的granularity,这个也是在内存中完成
  3. 二级索引过滤granularity。从磁盘上读取col4,对granularity再次进行过滤。这个会进行磁盘的IO操作
  4. prewhere其他条件过滤。如果prewhere还有其他的字段,就从磁盘上读取出来,再次进行granularity的过滤
  5. 读取其他所有需要的字段并进行final合并。读取select中的所有字段和where中要使用的字段,读取主键的所有字段,以及version字段,按version对数据进行merge操作
  6. where过滤数据。使用col6字段进行过滤
  7. 对数据进行order by或者group操作返回数据

注意

  1. 上述只有第一步和第二步,即分区过滤和一级索引过滤,是在内存中完成的,其他均需要进行IO操作
  2. 需要注意final是在prewhere之后,where之前起作用
  3. prewhere之后,final之前会读取当前sql所需要的所有字段
http://www.lryc.cn/news/299096.html

相关文章:

  • 【动态规划】【中位数】【C++算法】1478. 安排邮筒
  • C#系列-数据结构+递归算法+排序算法(3)
  • Redis实现秒杀
  • 4 scala集合-Map
  • QT 对象树模型
  • ubuntu快速安装miniconda
  • 阿里云游戏服务器多少钱一年?
  • 小游戏和GUI编程(7) | SimpleNN 界面源码解析
  • c++设计模式之代理模式
  • 第5个-模糊加载
  • rtt设备io框架面向对象学习-adc设备
  • 面试官:介绍一下Exception和Error之间的区别
  • 【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门
  • ElasticSearch之search API
  • 07-Java桥接模式 ( Bridge Pattern )
  • golang集成sentry: go-redis
  • 用EXCEL从地址(上海)中提取各区(浦东新区等区)信息
  • 关于在分布式环境中RVN和使用场景的介绍3
  • 计算最小公倍数math.lcm()
  • VUE SEO 几种方案经典面试题
  • Python和VBA批量提取Word中的表格
  • Swift Combine 有序的异步操作 从入门到精通十二
  • 国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理
  • idea:如何连接数据库
  • JS中ES5和ES6的区别
  • 软考24-上午题-图1
  • 书生·浦语大模型第四课作业
  • 勒索攻击风起云涌,Sodinokibi深度分析
  • 1124. 骑马修栅栏(欧拉路径,模板)
  • C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject