在传统的mysql中,日常中,我们一般建议join的表不要超过3张。但是在数据仓库的环境下,我们一般经常会涉及到 4张表的join,5张表的join,乃至更多,那么在查询的时候,我们可能会涉及到各个表之间join的数据参差不齐。
例如:现在我们要做a,b,c,d,e5张表的join,select * from a join b ... join c ...join d ...join e... 这时候如果a和b先join,然后结果数据是2000万,然后再join c表,结果变成了100万,然后再join d表,结果变成了50万,再join e表,结果剩1000。 那么我们如果按照这种sql进行编写的话,整个执行时长可能会耗时几十秒乃至几分钟。有sql基础的人都知道这个是不遵从小结果join大结果的,所以一般第一反应就是更改join的顺序。
在doris中我们可以直接使用join Reorder进行整改,这个时候我们不需要更改原来的sql顺序,只需要执行下:
set enable_cost_based_join_reorder = true
通过上面这一个语句开启join_reorder即可,doris将自动帮我们调整顺序进行执行,正在的执行则一次是e,d,c,b,a的顺序。同时在执行的过程中,大家能看到原来执行需要几十秒乃至几分钟的任务瞬间减少了很多。这就是join Reorder的优化。
还没有评论,来说两句吧...