codecamp

Mycat2 Filter&Project&FieldTrimmer

Filter下推

Mycat2在对SQL编译成生成逻辑关系表达式.Mycat2对它进行Filter下推规则处理,使Filter尽量下沉到TableScan之上,这样就可以应用分区剪裁规则,减少扫描的物理表的数量,使SQL查询具有水平扩展性.

Project下推

另外Project下推也是一个很重要的规则,它关系表达式中的作用是执行投影与函数表达式计算.

  1. 当执行的函数是session级别的函数,比如row_count,就不会下推该函数.
  2. Mycat2会对多个相邻Project合拼.
  3. 把常用的函数下推到存储节点运算,进一步减少Mycat的计算负担.

FieldTrimmer列剪裁

一方面,仅仅依赖SQL编译成逻辑关系表达式,以SQL语义生成Project是不足够的,因为Mycat2会需要与后端存储节点进行网络通讯,如果没用的字段的列过多,会导致多余的网络损耗.另一方面,对于无法变成SQL的Project,会进一步编译成执行器,在算子之间交换数据,存在多余的列的值,也是会导致多余的内存占用,转换计算问题.所以Mycat2在SQL重写器中引入FieldTrimmer添加额外的Project算子剪裁列来减少不必要的性能损耗.

Mycat2 分页排序 MergeSort
Mycat2 JoinClustering
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }