00:00
来这么一个语句,很简单,From这张表就是int类型啊,INT32吧,我们记错还是多少无所谓了,反正就数值类型乘以二,然后再求一个上,如果是have,它是怎么个执行顺序啊?它是不是差一行先乘以二呀?嗯,每一行都乘以二之后再做什么三好,你换一种思路,如果你这样是不是很费劲啊?咱们现在是列式存储,是不是一列在一起啊?我是不是先把这一整列拿到啊?我直接算一下是不是很快啊?我直接然后再乘以个二不就得了吗?你至于每一行乘一遍吗?哪种效率高?肯定是后面这种对不对,好可house会帮我优化。它优化成长先上再乘以二,很明显的,这个很明显,这叫聚合外推啊,聚合外推你要知道外推什么意思,放到外面去啊。
01:13
那还有一个聚合函数消除。啥意思,你看咱们这个语句啊,还是放大一点。我BY谁啊?用过ID,那咱们还记得have语法,来想一想我们group by一个字段,然后有什么要求啊?Select的字段有什么限制?首先group by的字段是不是必须要有?对吧?其次,另外的字段是不是只能是聚合函数,你不能写其他字段对吧?好,但你考虑过一个问题没有,如果我对分组字段做一个函数调用呢?可以吗?有没有试过?没意义吧?
02:00
一个组这个东西值是不是唯一的,所以你做一个萨是没意义啊,是不是能理解吧?那包括你求最大值,你同一个组按用户ID分组,那同一个组里边最大是不是只有一个值啊,那你求最大还有意义吗?那这个时候他会帮你怎么样把max操作去掉?来,我们瞅一眼,大家理解它的意思,咱们还是执行计划,优化语法这种来你看。是帮你把函数给去掉了。大家可以去掉的是谁呀?分组字段,然后你在S里面要调用函数,它会把函数去掉,因为什么。对于一个组而言是没有意义啊。好,但是其他字段就不会了,你看visit,这不是分组字段,是不是照样可以啊,对吧?呃,但是有一个是什么?你看这个没有,如果不是那种没有意义的计算,是不是还倒留着呀,对吧?下面这个是不是很简单,如果你不信,来我换一个吧,我把后面这个max我也换成some,我们试一下。
03:26
上面有没有意义,哎,对上你想我一个组有十条,那我的值比如说都是十对吧,是不是都一样啊,那我是不是算这个UID是不是多少100啊,有没有意义,但是业务上没有意义,但是语法上是有意义的,对吧?但是如果是max在这十条全为十的情况下,我取个最大值,那没意义的操作嘛,啊那同样的道理,如果是命呢,也没意义吧,求均值呢。
04:04
哎,对,都试一下嘛,这玩意很简单,大家在官网首页就可以试的啊,这几张表都是大家有的是没了好avg支不支持。这就是他的问题了,我觉得是没意义了,同学们你想嘛,你十条都一样,都是十,然后你。100除以十又等到十,但是它的判断逻辑比较简单,它是什么?你的操作偏复杂一点,我就不管了。大家能理解吗?所以并不是说完全他就能搞得定,他包不住呢,呃,另外而言,咱们说句实话来讲,可Li格house底层的自动优化的规则远远少于T优化器,也就是说咱们常规来讲说,呃,可Li里格号他对我们做了多少优化的没多少,而且它的一些规则跟判断条件都是比较简单的。
05:09
复杂一点那就不行了,所以你的搜狗写法要比hi更讲究一点,说实话,比hi更讲究,你写的不一样,那效率天差地别,甚至十倍以上的差距。同学们,不是数据倾斜啊,它就是十倍以上的差距,跟倾斜没关系。就是他的算是一个小缺点吧,毕竟它是一个新星嘛,新秀对吧,希望未来大家能贡献更多的优化规则,对吧,那不就很好了吗。
我来说两句