网站项目运营方案,山东网站定制设计公司,招聘网络营销推广人员,网站设计欣赏问题
简述clickhosue中一条select语句的执行过程#xff0c;使用的引擎是ReplacingMergeTree。例如#xff1a;
select col1,col2 from table final
prewhere col3 ? and col4 ? and col5 ? -- col3为分区键#xff0c;col4为二级索引,col5为主键字段
where col…问题
简述clickhosue中一条select语句的执行过程使用的引擎是ReplacingMergeTree。例如
select col1,col2 from table final
prewhere col3 ? and col4 ? and col5 ? -- col3为分区键col4为二级索引,col5为主键字段
where col6 ?
order by col7;回答
分区过滤。根据col3确定分区这一步在内存中完成一级索引过滤granularity。根据col5字段从分区中过滤出来符合条件的granularity这个也是在内存中完成二级索引过滤granularity。从磁盘上读取col4对granularity再次进行过滤。这个会进行磁盘的IO操作prewhere其他条件过滤。如果prewhere还有其他的字段就从磁盘上读取出来再次进行granularity的过滤读取其他所有需要的字段并进行final合并。读取select中的所有字段和where中要使用的字段读取主键的所有字段以及version字段按version对数据进行merge操作where过滤数据。使用col6字段进行过滤对数据进行order by或者group操作返回数据
注意
上述只有第一步和第二步即分区过滤和一级索引过滤是在内存中完成的其他均需要进行IO操作需要注意final是在prewhere之后where之前起作用prewhere之后final之前会读取当前sql所需要的所有字段