diff --git a/src/sql/optimizer/ob_join_order.cpp b/src/sql/optimizer/ob_join_order.cpp index e26332053..7e9929a80 100644 --- a/src/sql/optimizer/ob_join_order.cpp +++ b/src/sql/optimizer/ob_join_order.cpp @@ -4068,13 +4068,10 @@ int ObJoinOrder::get_excluded_condition_exprs(ObIArray &excluded_co double ObJoinOrder::calc_single_parallel_rows(double rows, int64_t parallel) { double ret = rows; - if (rows < parallel) { - parallel = rows; - + if (parallel >= 1) { + ret = rows / parallel; } - //at least one parallel - parallel = parallel < 1 ? 1: parallel; - ret = rows / parallel; + ret = ret < 1 ? 1 : ret; return ret; } @@ -6869,6 +6866,7 @@ int JoinPath::cost_nest_loop_join(int64_t join_parallel, } else if (DistAlgo::DIST_BROADCAST_NONE == join_dist_algo_ || DistAlgo::DIST_ALL_NONE == join_dist_algo_) { right_rows /= in_parallel; + left_rows = ObJoinOrder::calc_single_parallel_rows(left_rows, 1); } else if (DistAlgo::DIST_NONE_BROADCAST == join_dist_algo_ || DistAlgo::DIST_NONE_ALL == join_dist_algo_) { left_rows = ObJoinOrder::calc_single_parallel_rows(left_rows, in_parallel); diff --git a/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_business_mysql.result b/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_business_mysql.result index c77cc1e93..8ab7812ae 100644 --- a/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_business_mysql.result +++ b/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_business_mysql.result @@ -578,23 +578,24 @@ where b.card_no is null order by a.card_no limit 0,2000; Query Plan -============================================================================================================= -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| -------------------------------------------------------------------------------------------------------------- -|0 |LIMIT | |1 |3 | -|1 |└─NESTED-LOOP ANTI JOIN | |1 |3 | -|2 | ├─SUBPLAN SCAN |a |1 |3 | -|3 | │ └─MERGE DISTINCT | |1 |3 | -|4 | │ └─TABLE FULL SCAN |pcb_common_bill_01(UK_CARDNO_ATTR_PRODID_OUTNO)|1 |3 | -|5 | └─SUBPLAN SCAN |VIEW1 |1 |18 | -|6 | └─DISTRIBUTED TABLE RANGE SCAN|b(uk_cardno) |1 |18 | -============================================================================================================= +================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +-------------------------------------------------------------------------------------------------- +|0 |LIMIT | |1 |5 | +|1 |└─MERGE ANTI JOIN | |1 |5 | +|2 | ├─SUBPLAN SCAN |a |1 |3 | +|3 | │ └─MERGE DISTINCT | |1 |3 | +|4 | │ └─TABLE FULL SCAN|pcb_common_bill_01(UK_CARDNO_ATTR_PRODID_OUTNO)|1 |3 | +|5 | └─SUBPLAN SCAN |VIEW1 |1 |3 | +|6 | └─TABLE FULL SCAN |b(uk_cardno) |1 |3 | +================================================================================================== Outputs & filters: ------------------------------------- 0 - output([a.card_no]), filter(nil), rowset=16 limit(2000), offset(0) 1 - output([a.card_no]), filter(nil), rowset=16 - conds(nil), nl_params_([a.card_no(:0)]), use_batch=false + equal_conds([a.card_no = VIEW1.b.card_no]), other_conds(nil) + merge_directions([ASC]) 2 - output([a.card_no]), filter(nil), rowset=16 access([a.card_no]) 3 - output([pcb_common_bill_01.CARD_NO]), filter(nil), rowset=16 @@ -606,13 +607,12 @@ Outputs & filters: range_key([pcb_common_bill_01.CARD_NO], [pcb_common_bill_01.ATTRIBUTE_INST], [pcb_common_bill_01.PRODUCT_ID], [pcb_common_bill_01.OUT_BILL_NO], [pcb_common_bill_01.shadow_pk_0]), range(5001,MIN,MIN,MIN,MIN ; 5001￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿,MAX,MAX,MAX, MAX) - 5 - output(nil), filter(nil), rowset=16 - access(nil) + 5 - output([VIEW1.b.card_no]), filter(nil), rowset=16 + access([VIEW1.b.card_no]) 6 - output([b.card_no]), filter([(T_OP_LIKE, b.card_no, '5001____________', '\\')]), rowset=16 access([b.card_no]), partitions(p0) is_index_back=false, is_global_index=false, filter_before_indexback[false], - range_key([b.card_no], [b.shadow_pk_0]), range(5001,MIN ; 5001￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿,MAX), - range_cond([:0 = b.card_no]) + range_key([b.card_no], [b.shadow_pk_0]), range(5001,MIN ; 5001￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿,MAX) CREATE TABLE `pcb_installment_00` ( `BILL_NO` varchar(28) NOT NULL, `INSTALL_NUM` decimal(5,0) NOT NULL, diff --git a/tools/deploy/mysql_test/test_suite/subquery/r/mysql/optimizer_subquery_bug.result b/tools/deploy/mysql_test/test_suite/subquery/r/mysql/optimizer_subquery_bug.result index 67e6aded7..0e8c991ef 100644 --- a/tools/deploy/mysql_test/test_suite/subquery/r/mysql/optimizer_subquery_bug.result +++ b/tools/deploy/mysql_test/test_suite/subquery/r/mysql/optimizer_subquery_bug.result @@ -470,10 +470,11 @@ Query Plan -------------------------------------------------------------- |0 |HASH DISTINCT | |1 |3 | |1 |└─NESTED-LOOP JOIN CARTESIAN | |1 |3 | -|2 | ├─SUBPLAN SCAN |VIEW1|1 |3 | -|3 | │ └─SCALAR GROUP BY | |1 |3 | -|4 | │ └─TABLE FULL SCAN |t2 |3 |3 | -|5 | └─TABLE FULL SCAN |t1 |3 |3 | +|2 | ├─TABLE FULL SCAN |t1 |3 |3 | +|3 | └─MATERIAL | |1 |3 | +|4 | └─SUBPLAN SCAN |VIEW1|1 |3 | +|5 | └─SCALAR GROUP BY | |1 |3 | +|6 | └─TABLE FULL SCAN |t2 |3 |3 | ============================================================== Outputs & filters: ------------------------------------- @@ -481,19 +482,20 @@ Outputs & filters: distinct([VIEW1.sum(b)]) 1 - output([VIEW1.sum(b)]), filter(nil), rowset=16 conds(nil), nl_params_(nil), use_batch=false - 2 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 2 - output(nil), filter(nil), rowset=16 + access(nil), partitions(p0) + is_index_back=false, is_global_index=false, + range_key([t1.a]), range(MIN ; MAX)always true + 3 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 4 - output([VIEW1.sum(b)]), filter(nil), rowset=16 access([VIEW1.sum(b)]) - 3 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 + 5 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t2.b))]) - 4 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 + 6 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 access([t2.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t2.a]), range(MIN ; MAX)always true, pushdown_aggregation([T_FUN_SUM(t2.b)]) - 5 - output(nil), filter(nil), rowset=16 - access(nil), partitions(p0) - is_index_back=false, is_global_index=false, - range_key([t1.a]), range(MIN ; MAX)always true select (select sum(b) from t2) as temp from t1 group by temp having temp > 4; +------+ | temp | @@ -507,10 +509,11 @@ Query Plan -------------------------------------------------------------- |0 |HASH DISTINCT | |1 |3 | |1 |└─NESTED-LOOP JOIN CARTESIAN | |1 |3 | -|2 | ├─SUBPLAN SCAN |VIEW1|1 |3 | -|3 | │ └─SCALAR GROUP BY | |1 |3 | -|4 | │ └─TABLE FULL SCAN |t2 |3 |3 | -|5 | └─TABLE FULL SCAN |t1 |3 |3 | +|2 | ├─TABLE FULL SCAN |t1 |3 |3 | +|3 | └─MATERIAL | |1 |3 | +|4 | └─SUBPLAN SCAN |VIEW1|1 |3 | +|5 | └─SCALAR GROUP BY | |1 |3 | +|6 | └─TABLE FULL SCAN |t2 |3 |3 | ============================================================== Outputs & filters: ------------------------------------- @@ -518,19 +521,20 @@ Outputs & filters: distinct([VIEW1.sum(b)]) 1 - output([VIEW1.sum(b)]), filter(nil), rowset=16 conds(nil), nl_params_(nil), use_batch=false - 2 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 2 - output(nil), filter(nil), rowset=16 + access(nil), partitions(p0) + is_index_back=false, is_global_index=false, + range_key([t1.a]), range(MIN ; MAX)always true + 3 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 4 - output([VIEW1.sum(b)]), filter(nil), rowset=16 access([VIEW1.sum(b)]) - 3 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) < cast(4, DECIMAL_INT(33, 0))]), rowset=16 + 5 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) < cast(4, DECIMAL_INT(33, 0))]), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t2.b))]) - 4 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 + 6 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 access([t2.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t2.a]), range(MIN ; MAX)always true, pushdown_aggregation([T_FUN_SUM(t2.b)]) - 5 - output(nil), filter(nil), rowset=16 - access(nil), partitions(p0) - is_index_back=false, is_global_index=false, - range_key([t1.a]), range(MIN ; MAX)always true select (select sum(b) from t2) as temp from t1 group by temp having temp < 4; +------+ | temp | @@ -545,14 +549,15 @@ Query Plan |1 |├─SUBPLAN SCAN |VIEW2|1 |3 | |2 |│ └─HASH DISTINCT | |1 |3 | |3 |│ └─NESTED-LOOP JOIN CARTESIAN | |1 |3 | -|4 |│ ├─SUBPLAN SCAN |VIEW1|1 |3 | -|5 |│ │ └─SCALAR GROUP BY | |1 |3 | -|6 |│ │ └─TABLE FULL SCAN |t2 |3 |3 | -|7 |│ └─TABLE FULL SCAN |t1 |3 |3 | -|8 |└─MATERIAL | |1 |3 | -|9 | └─SUBPLAN SCAN |VIEW3|1 |3 | -|10| └─SCALAR GROUP BY | |1 |3 | -|11| └─TABLE FULL SCAN |t3 |1 |3 | +|4 |│ ├─TABLE FULL SCAN |t1 |3 |3 | +|5 |│ └─MATERIAL | |1 |3 | +|6 |│ └─SUBPLAN SCAN |VIEW1|1 |3 | +|7 |│ └─SCALAR GROUP BY | |1 |3 | +|8 |│ └─TABLE FULL SCAN |t2 |3 |3 | +|9 |└─MATERIAL | |1 |3 | +|10| └─SUBPLAN SCAN |VIEW3|1 |3 | +|11| └─SCALAR GROUP BY | |1 |3 | +|12| └─TABLE FULL SCAN |t3 |1 |3 | ================================================================== Outputs & filters: ------------------------------------- @@ -564,25 +569,26 @@ Outputs & filters: distinct([VIEW1.sum(b)]) 3 - output([VIEW1.sum(b)]), filter(nil), rowset=16 conds(nil), nl_params_(nil), use_batch=false - 4 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 4 - output(nil), filter(nil), rowset=16 + access(nil), partitions(p0) + is_index_back=false, is_global_index=false, + range_key([t1.a]), range(MIN ; MAX)always true + 5 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 6 - output([VIEW1.sum(b)]), filter(nil), rowset=16 access([VIEW1.sum(b)]) - 5 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 + 7 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t2.b))]) - 6 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 + 8 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 access([t2.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t2.a]), range(MIN ; MAX)always true, pushdown_aggregation([T_FUN_SUM(t2.b)]) - 7 - output(nil), filter(nil), rowset=16 - access(nil), partitions(p0) - is_index_back=false, is_global_index=false, - range_key([t1.a]), range(MIN ; MAX)always true - 8 - output([VIEW3.sum(b)]), filter(nil), rowset=16 9 - output([VIEW3.sum(b)]), filter(nil), rowset=16 + 10 - output([VIEW3.sum(b)]), filter(nil), rowset=16 access([VIEW3.sum(b)]) - 10 - output([T_FUN_SUM(T_FUN_SUM(t3.b))]), filter(nil), rowset=16 + 11 - output([T_FUN_SUM(T_FUN_SUM(t3.b))]), filter(nil), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t3.b))]) - 11 - output([T_FUN_SUM(t3.b)]), filter(nil), rowset=16 + 12 - output([T_FUN_SUM(t3.b)]), filter(nil), rowset=16 access([t3.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t3.a]), range(MIN ; MAX)always true, @@ -600,10 +606,11 @@ Query Plan -------------------------------------------------------------- |0 |HASH DISTINCT | |1 |3 | |1 |└─NESTED-LOOP JOIN CARTESIAN | |1 |3 | -|2 | ├─SUBPLAN SCAN |VIEW1|1 |3 | -|3 | │ └─SCALAR GROUP BY | |1 |3 | -|4 | │ └─TABLE FULL SCAN |t2 |3 |3 | -|5 | └─TABLE FULL SCAN |t1 |3 |3 | +|2 | ├─TABLE FULL SCAN |t1 |3 |3 | +|3 | └─MATERIAL | |1 |3 | +|4 | └─SUBPLAN SCAN |VIEW1|1 |3 | +|5 | └─SCALAR GROUP BY | |1 |3 | +|6 | └─TABLE FULL SCAN |t2 |3 |3 | ============================================================== Outputs & filters: ------------------------------------- @@ -611,19 +618,20 @@ Outputs & filters: distinct([VIEW1.sum(b)]) 1 - output([VIEW1.sum(b)]), filter(nil), rowset=16 conds(nil), nl_params_(nil), use_batch=false - 2 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 2 - output(nil), filter(nil), rowset=16 + access(nil), partitions(p0) + is_index_back=false, is_global_index=false, + range_key([t1.a]), range(MIN ; MAX)always true + 3 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 4 - output([VIEW1.sum(b)]), filter(nil), rowset=16 access([VIEW1.sum(b)]) - 3 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))], [T_FUN_SUM(T_FUN_SUM(t2.b)) > T_FUN_SUM(T_FUN_SUM(t2.b))]), rowset=16 + 5 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))], [T_FUN_SUM(T_FUN_SUM(t2.b)) > T_FUN_SUM(T_FUN_SUM(t2.b))]), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t2.b))]) - 4 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 + 6 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 access([t2.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t2.a]), range(MIN ; MAX)always true, pushdown_aggregation([T_FUN_SUM(t2.b)]) - 5 - output(nil), filter(nil), rowset=16 - access(nil), partitions(p0) - is_index_back=false, is_global_index=false, - range_key([t1.a]), range(MIN ; MAX)always true select (select sum(b) from t2) as temp from t1 group by temp having temp > 4 and temp > (select sum(b) from t2); +------+ | temp | @@ -637,28 +645,30 @@ Query Plan |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| ------------------------------------------------------------ |0 |NESTED-LOOP JOIN CARTESIAN | |1 |3 | -|1 |├─SUBPLAN SCAN |VIEW1|1 |3 | -|2 |│ └─SCALAR GROUP BY | |1 |3 | -|3 |│ └─TABLE FULL SCAN |t2 |3 |3 | -|4 |└─TABLE FULL SCAN |t1 |3 |3 | +|1 |├─TABLE FULL SCAN |t1 |3 |3 | +|2 |└─MATERIAL | |1 |3 | +|3 | └─SUBPLAN SCAN |VIEW1|1 |3 | +|4 | └─SCALAR GROUP BY | |1 |3 | +|5 | └─TABLE FULL SCAN |t2 |3 |3 | ============================================================ Outputs & filters: ------------------------------------- 0 - output([VIEW1.sum(b)], [t1.a]), filter(nil), rowset=16 conds(nil), nl_params_(nil), use_batch=false - 1 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 1 - output([t1.a]), filter(nil), rowset=16 + access([t1.a]), partitions(p0) + is_index_back=false, is_global_index=false, + range_key([t1.a]), range(MIN ; MAX)always true + 2 - output([VIEW1.sum(b)]), filter(nil), rowset=16 + 3 - output([VIEW1.sum(b)]), filter(nil), rowset=16 access([VIEW1.sum(b)]) - 2 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 + 4 - output([T_FUN_SUM(T_FUN_SUM(t2.b))]), filter([T_FUN_SUM(T_FUN_SUM(t2.b)) > cast(4, DECIMAL_INT(33, 0))]), rowset=16 group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t2.b))]) - 3 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 + 5 - output([T_FUN_SUM(t2.b)]), filter(nil), rowset=16 access([t2.b]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t2.a]), range(MIN ; MAX)always true, pushdown_aggregation([T_FUN_SUM(t2.b)]) - 4 - output([t1.a]), filter(nil), rowset=16 - access([t1.a]), partitions(p0) - is_index_back=false, is_global_index=false, - range_key([t1.a]), range(MIN ; MAX)always true select (select sum(b) from t2) as temp, a from t1 group by a having temp > 4; +------+---+ | temp | a |