>From Vijay Sarathy <[email protected]>: Vijay Sarathy has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18320 )
Change subject: [ASTERIXDB-3399][COMP] Nested Loops index joins costing ...................................................................... [ASTERIXDB-3399][COMP] Nested Loops index joins costing Change-Id: I44740b77b88bc4c8b440d02162318113642cb880 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18320 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Vijay Sarathy <[email protected]> --- M asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.4.plan M asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.3.plan M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java M asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan 4 files changed, 66 insertions(+), 49 deletions(-) Approvals: Vijay Sarathy: Looks good to me, approved Jenkins: Verified; Verified diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java index d5743e4..e868fa3 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java @@ -672,7 +672,11 @@ // dataCost (0) will contain the dataScan cost with the first index //dataCost (1) will contain the dataScan cost with the first index and the 2nd index and so on. sel *= optionalIndexesInfo.get(i).second; // assuming selectivities are independent for now - dataCosts.add(joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel)); // D0; D01; D012; ... + if (optionalIndexesInfo.get(i).first.isPrimaryIndex()) { + dataCosts.add(joinEnum.getCostHandle().zeroCost()); + } else { + dataCosts.add(joinEnum.getCostMethodsHandle().costIndexDataScan(this, sel)); // D0; D01; D012; ... + } } // At the of of the above loop, I0, I1, I2 ... have been computed diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.3.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.3.plan index c86ab50..8a6990c 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.3.plan +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.3.plan @@ -1,46 +1,46 @@ -distribute result [$$48] [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] +distribute result [$$48] [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- DISTRIBUTE_RESULT |PARTITIONED| - exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] + exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$48]) [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] + project ([$$48]) [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- STREAM_PROJECT |PARTITIONED| - assign [$$48] <- [{"$1": $$51}] [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] + assign [$$48] <- [{"$1": $$51}] [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- ASSIGN |PARTITIONED| - project ([$$51]) [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] + project ([$$51]) [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- STREAM_PROJECT |PARTITIONED| - exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 4497.18] + exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 4495.77] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| group by ([$$o_custkey := $$54]) decor ([]) { aggregate [$$51] <- [sql-sum-serial($$53)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 100.0, op-cost: 1498.59, total-cost: 4497.18] + } [cardinality: 100.0, op-cost: 1498.59, total-cost: 4495.77] -- EXTERNAL_GROUP_BY[$$54] |PARTITIONED| - exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 2998.59] + exchange [cardinality: 100.0, op-cost: 0.0, total-cost: 2997.18] -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED| group by ([$$54 := $$49]) decor ([]) { aggregate [$$53] <- [sql-count-serial(1)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 100.0, op-cost: 1498.59, total-cost: 2998.59] + } [cardinality: 100.0, op-cost: 1498.59, total-cost: 2997.18] -- EXTERNAL_GROUP_BY[$$49] |PARTITIONED| - exchange [cardinality: 1498.59, op-cost: 0.0, total-cost: 1500.0] + exchange [cardinality: 1498.59, op-cost: 0.0, total-cost: 1498.59] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$49]) [cardinality: 1498.59, op-cost: 0.0, total-cost: 1500.0] + project ([$$49]) [cardinality: 1498.59, op-cost: 0.0, total-cost: 1498.59] -- STREAM_PROJECT |PARTITIONED| - assign [$$49] <- [$$o.getField(1)] [cardinality: 1498.59, op-cost: 0.0, total-cost: 1500.0] + assign [$$49] <- [$$o.getField(1)] [cardinality: 1498.59, op-cost: 0.0, total-cost: 1498.59] -- ASSIGN |PARTITIONED| - project ([$$o]) [cardinality: 1498.59, op-cost: 0.0, total-cost: 1500.0] + project ([$$o]) [cardinality: 1498.59, op-cost: 0.0, total-cost: 1498.59] -- STREAM_PROJECT |PARTITIONED| - exchange [cardinality: 1498.59, op-cost: 0.0, total-cost: 1500.0] + exchange [cardinality: 1498.59, op-cost: 0.0, total-cost: 1498.59] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - unnest-map [$$50, $$o] <- index-search("Orders", 0, "Default", "tpch", "Orders", false, false, 1, $$55, 0, false, true, false) [cardinality: 1498.59, op-cost: 1500.0, total-cost: 1500.0] + unnest-map [$$50, $$o] <- index-search("Orders", 0, "Default", "tpch", "Orders", false, false, 1, $$55, 0, false, true, false) [cardinality: 1498.59, op-cost: 1498.59, total-cost: 1498.59] -- BTREE_SEARCH |PARTITIONED| exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| assign [$$55] <- [2] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- ASSIGN |PARTITIONED| empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] - -- EMPTY_TUPLE_SOURCE |PARTITIONED| \ No newline at end of file + -- EMPTY_TUPLE_SOURCE |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.4.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.4.plan index 46521c5..6ea6385 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.4.plan +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.4.plan @@ -1,42 +1,42 @@ -distribute result [$$48] [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] +distribute result [$$48] [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- DISTRIBUTE_RESULT |PARTITIONED| - exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] + exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$48]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] + project ([$$48]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- STREAM_PROJECT |PARTITIONED| - assign [$$48] <- [{"$1": $$51}] [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] + assign [$$48] <- [{"$1": $$51}] [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- ASSIGN |PARTITIONED| - project ([$$51]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] + project ([$$51]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- STREAM_PROJECT |PARTITIONED| - exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 4491.54] + exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 4487.31] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| group by ([$$o_orderdate := $$54]) decor ([]) { aggregate [$$51] <- [sql-sum-serial($$53)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 1495.77, op-cost: 1495.77, total-cost: 4491.54] + } [cardinality: 1495.77, op-cost: 1495.77, total-cost: 4487.31] -- EXTERNAL_GROUP_BY[$$54] |PARTITIONED| - exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 2995.77] + exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 2991.54] -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED| group by ([$$54 := $$49]) decor ([]) { aggregate [$$53] <- [sql-count-serial(1)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 1495.77, op-cost: 1495.77, total-cost: 2995.77] + } [cardinality: 1495.77, op-cost: 1495.77, total-cost: 2991.54] -- EXTERNAL_GROUP_BY[$$49] |PARTITIONED| - exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 1500.0] + exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 1495.77] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$49]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 1500.0] + project ([$$49]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 1495.77] -- STREAM_PROJECT |PARTITIONED| - assign [$$49] <- [$$o.getField(4)] [cardinality: 1495.77, op-cost: 0.0, total-cost: 1500.0] + assign [$$49] <- [$$o.getField(4)] [cardinality: 1495.77, op-cost: 0.0, total-cost: 1495.77] -- ASSIGN |PARTITIONED| - project ([$$o]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 1500.0] + project ([$$o]) [cardinality: 1495.77, op-cost: 0.0, total-cost: 1495.77] -- STREAM_PROJECT |PARTITIONED| - exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 1500.0] + exchange [cardinality: 1495.77, op-cost: 0.0, total-cost: 1495.77] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - unnest-map [$$50, $$o] <- index-search("Orders", 0, "Default", "tpch", "Orders", false, false, 1, $$55, 0, false, true, false) [cardinality: 1495.77, op-cost: 1500.0, total-cost: 1500.0] + unnest-map [$$50, $$o] <- index-search("Orders", 0, "Default", "tpch", "Orders", false, false, 1, $$55, 0, false, true, false) [cardinality: 1495.77, op-cost: 1495.77, total-cost: 1495.77] -- BTREE_SEARCH |PARTITIONED| exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan index f192363..7eb0d3f 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/cardinality-estimation/single-collection-queries/single-collection-queries.7.plan @@ -1,48 +1,48 @@ -distribute result [$$51] [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] +distribute result [$$51] [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- DISTRIBUTE_RESULT |PARTITIONED| - exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] + exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$51]) [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] + project ([$$51]) [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- STREAM_PROJECT |PARTITIONED| - assign [$$51] <- [{"$1": $$55}] [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] + assign [$$51] <- [{"$1": $$55}] [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- ASSIGN |PARTITIONED| - project ([$$55]) [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] + project ([$$55]) [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- STREAM_PROJECT |PARTITIONED| - exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 8648.78] + exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 3965.67] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| group by ([$$l_partkey := $$59]) decor ([]) { aggregate [$$55] <- [sql-sum-serial($$58)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 191.0, op-cost: 1321.89, total-cost: 8648.78] + } [cardinality: 191.0, op-cost: 1321.89, total-cost: 3965.67] -- EXTERNAL_GROUP_BY[$$59] |PARTITIONED| - exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 7326.89] + exchange [cardinality: 191.0, op-cost: 0.0, total-cost: 2643.78] -- HASH_PARTITION_EXCHANGE [$$59] |PARTITIONED| group by ([$$59 := $$52]) decor ([]) { aggregate [$$58] <- [sql-count-serial(1)] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- AGGREGATE |LOCAL| nested tuple source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- NESTED_TUPLE_SOURCE |LOCAL| - } [cardinality: 191.0, op-cost: 1321.89, total-cost: 7326.89] + } [cardinality: 191.0, op-cost: 1321.89, total-cost: 2643.78] -- EXTERNAL_GROUP_BY[$$52] |PARTITIONED| - exchange [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + exchange [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - project ([$$52]) [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + project ([$$52]) [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- STREAM_PROJECT |PARTITIONED| - select (and(gt($$53, 1), gt($$54, 4))) [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + select (and(gt($$53, 1), gt($$54, 4))) [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- STREAM_SELECT |PARTITIONED| - project ([$$53, $$54, $$52]) [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + project ([$$53, $$54, $$52]) [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- STREAM_PROJECT |PARTITIONED| - assign [$$52] <- [$$l.getField(1)] [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + assign [$$52] <- [$$l.getField(1)] [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- ASSIGN |PARTITIONED| - exchange [cardinality: 1321.89, op-cost: 0.0, total-cost: 6005.0] + exchange [cardinality: 1321.89, op-cost: 0.0, total-cost: 1321.89] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| - unnest-map [$$53, $$54, $$l] <- index-search("LineItem", 0, "Default", "tpch", "LineItem", false, false, 2, $$60, $$61, 0, true, true, false) [cardinality: 1321.89, op-cost: 6005.0, total-cost: 6005.0] + unnest-map [$$53, $$54, $$l] <- index-search("LineItem", 0, "Default", "tpch", "LineItem", false, false, 2, $$60, $$61, 0, true, true, false) [cardinality: 1321.89, op-cost: 1321.89, total-cost: 1321.89] -- BTREE_SEARCH |PARTITIONED| exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- ONE_TO_ONE_EXCHANGE |PARTITIONED| assign [$$60, $$61] <- [1, 4] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] -- ASSIGN |PARTITIONED| empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0] - -- EMPTY_TUPLE_SOURCE |PARTITIONED| \ No newline at end of file + -- EMPTY_TUPLE_SOURCE |PARTITIONED| -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18320 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: I44740b77b88bc4c8b440d02162318113642cb880 Gerrit-Change-Number: 18320 Gerrit-PatchSet: 4 Gerrit-Owner: [email protected] Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Vijay Sarathy <[email protected]> Gerrit-MessageType: merged
