[CP] fix calc nested loop join / spf cost bug
This commit is contained in:
		| @ -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, | ||||
|  | ||||
| @ -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 | | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 zzg19950727
					zzg19950727