Commit 0940a969 authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-18478 ANALYZE for statement should show selectivity of ICP, part#2

Part#2, variant 2: Make the printed r_ values in JSON output consistent.
After this patch, ANALYZE output has:

- r_index_rows (NEW) - Observed number of rows before ICP or Rowid Filtering
  checks. This is a per-scan average. like r_rows and "rows" are.

- r_rows (AS BEFORE) - Observed number of rows after ICP and Rowid Filtering.

- r_icp_filtered (NEW) - Observed selectivity of ICP condition.

- (AS BEFORE) observed selectivity of Rowid Filter is in
  $.rowid_filter.r_selectivity_pct

- r_total_filtered - Observed combined selectivity: fraction of rows left
  after applying ICP condition, Rowid Filter, and attached_condition.
  This is now comparable with "filtered" and is printed right after it.

- r_filtered (AS BEFORE) - Observed selectivity of "attached_condition".

Tabular ANALYZE output is not changed. Note that JSON's r_filtered and
r_rows have the same meanings as before and have the same meaning as in
tabular output.
parent e87d1e39
......@@ -40,8 +40,9 @@ X
"pages_accessed": "REPLACED"
},
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.pk < 120000"
"r_total_filtered": 100,
"attached_condition": "t1.pk < 120000",
"r_filtered": 100
}
}
]
......@@ -70,13 +71,14 @@ X
"access_type": "ALL",
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"
},
"attached_condition": "t1.pk < 120000"
"attached_condition": "t1.pk < 120000",
"r_filtered": 100
}
}
}
......@@ -103,13 +105,14 @@ X
"access_type": "ALL",
"rows": 10000,
"r_rows": 10000,
"r_filtered": 50,
"r_total_filtered": 50,
"r_total_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"
},
"attached_condition": "t1.pk MOD 2 = 1"
"attached_condition": "t1.pk MOD 2 = 1",
"r_filtered": 50
}
}
}
......@@ -155,6 +158,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -174,6 +178,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"unique": 1,
......@@ -193,6 +198,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
This diff is collapsed.
......@@ -59,8 +59,9 @@ X
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a < 700 and t1.b is not null"
"r_total_filtered": 100,
"attached_condition": "t1.a < 700 and t1.b is not null",
"r_filtered": 100
}
},
{
......@@ -81,8 +82,9 @@ X
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 10,
"r_filtered": 20,
"attached_condition": "t2.a < 100"
"r_total_filtered": 20,
"attached_condition": "t2.a < 100",
"r_filtered": 20
},
"buffer_type": "flat",
"buffer_size": "18Kb",
......@@ -157,8 +159,9 @@ X
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a is not null"
"r_total_filtered": 100,
"attached_condition": "t1.a is not null",
"r_filtered": 100
}
},
{
......@@ -179,6 +182,7 @@ X
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 10,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -54,9 +54,10 @@ ANALYZE
"access_type": "ALL",
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_engine_stats": REPLACED
"r_engine_stats": REPLACED,
"r_filtered": 100
}
}
}
......@@ -110,10 +111,11 @@ ANALYZE
"used_key_parts": ["a"],
"rows": 9,
"r_rows": 10,
"r_filtered": 100,
"r_total_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t2.a < 10"
"attached_condition": "t2.a < 10",
"r_filtered": 100
}
}
}
......@@ -164,9 +166,10 @@ ANALYZE
"access_type": "ALL",
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_engine_stats": REPLACED
"r_engine_stats": REPLACED,
"r_filtered": 100
}
}
}
......@@ -256,8 +259,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t0.a is not null"
"r_total_filtered": 100,
"attached_condition": "t0.a is not null",
"r_filtered": 100
}
},
{
......@@ -278,6 +282,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -372,8 +377,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t0.a is not null"
"r_total_filtered": 100,
"attached_condition": "t0.a is not null",
"r_filtered": 100
}
}
}
......@@ -396,6 +402,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -449,8 +456,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "t2.a MOD 2 = 0"
"r_total_filtered": 50,
"attached_condition": "t2.a MOD 2 = 0",
"r_filtered": 50
}
}
]
......@@ -509,6 +517,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -526,6 +535,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -603,8 +613,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 80,
"attached_condition": "t6.b > 0 and t6.a <= 5"
"r_total_filtered": 80,
"attached_condition": "t6.b > 0 and t6.a <= 5",
"r_filtered": 80
}
},
{
......@@ -621,6 +632,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -742,6 +754,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"using_index_for_group_by": true
}
......
......@@ -2527,6 +2527,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -2564,8 +2565,9 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_filtered": 90,
"attached_condition": "src.counter < 10"
"r_total_filtered": 90,
"attached_condition": "src.counter < 10",
"r_filtered": 90
}
}
]
......@@ -3945,8 +3947,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a1 is not null"
"r_total_filtered": 100,
"attached_condition": "t1.a1 is not null",
"r_filtered": 100
}
},
{
......@@ -3966,6 +3969,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"first_match": "t1",
"materialized": {
......@@ -3996,6 +4000,7 @@ ANALYZE
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": null,
"r_filtered": null,
"using_index": true
}
......@@ -4025,8 +4030,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "tt2.b1 is not null"
"r_total_filtered": 100,
"attached_condition": "tt2.b1 is not null",
"r_filtered": 100
}
},
{
......@@ -4046,6 +4052,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4233,6 +4240,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -4262,6 +4270,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4289,8 +4298,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.c is not null"
"r_total_filtered": 100,
"attached_condition": "t1.c is not null",
"r_filtered": 100
}
},
{
......@@ -4310,6 +4320,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4402,6 +4413,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
......@@ -21495,6 +21495,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -21524,8 +21525,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "t1.a = 3"
"r_total_filtered": 50,
"attached_condition": "t1.a = 3",
"r_filtered": 50
}
}
]
......
......@@ -388,6 +388,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -409,8 +410,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))"
"r_total_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))",
"r_filtered": 100
}
},
{
......@@ -431,8 +433,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))"
"r_total_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))",
"r_filtered": 100
}
},
{
......@@ -452,8 +455,9 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_filtered": 100,
"r_total_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))",
"r_filtered": 100,
"materialized": {
"lateral": 1,
"query_block": {
......@@ -481,6 +485,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -498,6 +503,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -108,6 +108,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -135,6 +136,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -169,6 +171,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -198,6 +201,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -225,6 +229,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -407,6 +412,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -424,6 +430,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -460,6 +467,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -477,6 +485,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -521,6 +530,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -550,6 +560,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -567,6 +578,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -603,6 +615,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -620,6 +633,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -142,6 +142,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -171,6 +172,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -198,6 +200,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -237,6 +240,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -266,6 +270,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -293,6 +298,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -540,6 +546,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -557,6 +564,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -593,6 +601,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -610,6 +619,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -653,6 +663,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -682,6 +693,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -699,6 +711,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -735,6 +748,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -752,6 +766,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -1311,6 +1311,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"using_index_for_group_by": true
}
......@@ -1721,6 +1722,7 @@ ANALYZE
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 0,
"r_total_filtered": null,
"r_filtered": null,
"impossible_on_condition": true
}
......@@ -1738,6 +1740,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -1815,6 +1818,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -1836,8 +1840,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"r_total_filtered": 100,
"attached_condition": "trigcond(t2.pk is null) and trigcond(trigcond(t1.a is not null))",
"r_filtered": 100,
"using_index": true,
"not_exists": true
}
......@@ -1919,8 +1924,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a is not null"
"r_total_filtered": 100,
"attached_condition": "t1.a is not null",
"r_filtered": 100
}
},
{
......@@ -1941,6 +1947,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"using_index": true,
"distinct": true
......@@ -2039,8 +2046,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t3.a is not null"
"r_total_filtered": 100,
"attached_condition": "t3.a is not null",
"r_filtered": 100
}
},
{
......@@ -2062,8 +2070,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"index_condition_bka": "t4.b + 1 <= t3.b + 1"
"r_total_filtered": 100,
"index_condition_bka": "t4.b + 1 <= t3.b + 1",
"r_filtered": 100
},
"buffer_type": "flat",
"buffer_size": "400",
......
......@@ -55,8 +55,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 30,
"attached_condition": "t1.a in (2,3,4)"
"r_total_filtered": 30,
"attached_condition": "t1.a in (2,3,4)",
"r_filtered": 30
}
}
]
......@@ -79,10 +80,11 @@ ANALYZE
"access_type": "ALL",
"rows": 10,
"r_rows": 10,
"r_filtered": 30,
"r_total_filtered": 30,
"r_total_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.a in (2,3,4)"
"attached_condition": "t1.a in (2,3,4)",
"r_filtered": 30
}
}
}
......@@ -103,10 +105,11 @@ ANALYZE
"access_type": "ALL",
"rows": 10,
"r_rows": 10,
"r_filtered": 0,
"r_total_filtered": 0,
"r_total_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.a in (20,30,40)"
"attached_condition": "t1.a in (20,30,40)",
"r_filtered": 0
}
}
}
......
......@@ -474,6 +474,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
......@@ -141,6 +141,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -168,6 +169,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -195,6 +197,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -229,6 +232,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -258,6 +262,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -285,6 +290,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -312,6 +318,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -468,6 +475,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -495,6 +503,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -512,6 +521,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -555,6 +565,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -584,6 +595,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -611,6 +623,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -628,6 +641,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -153,6 +153,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -180,6 +181,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -207,6 +209,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -241,6 +244,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -270,6 +274,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -297,6 +302,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -324,6 +330,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -499,6 +506,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -526,6 +534,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -543,6 +552,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......@@ -586,6 +596,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......@@ -615,6 +626,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -642,6 +654,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -659,6 +672,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
},
"buffer_type": "flat",
......
......@@ -57,6 +57,7 @@ JSON
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -79,8 +80,9 @@ JSON
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"r_total_filtered": 100,
"attached_condition": "trigcond(t1_t2.t2_d = t3.c and trigcond(t1_t2.t2_d is not null))",
"r_filtered": 100,
"using_index": true
}
},
......@@ -101,6 +103,7 @@ JSON
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"using_index": true
},
......
......@@ -1596,8 +1596,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 50,
"r_filtered": 100,
"r_total_filtered": 100,
"attached_condition": "t1.c = 10 or t1.c is null",
"r_filtered": 100,
"using_index": true
}
}
......@@ -3486,6 +3487,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -3984,6 +3986,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4154,6 +4157,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4207,6 +4211,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4266,6 +4271,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4339,6 +4345,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4515,6 +4522,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -4552,8 +4560,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 2,
"attached_condition": "t1.b = t2.b"
"r_total_filtered": 2,
"attached_condition": "t1.b = t2.b",
"r_filtered": 2
}
}
]
......
......@@ -121,6 +121,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -290,6 +291,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -455,6 +457,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -515,6 +518,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -354,16 +354,18 @@ ANALYZE
"loops": 1,
"r_loops": 1,
"rows": 1,
"r_index_rows": 1,
"r_rows": 1,
"cost": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"r_icp_filtered": 100,
"filtered": 49.20000076,
"r_filtered": 100,
"r_total_filtered": 100,
"index_condition": "t1.nm like '500%'",
"attached_condition": "t1.fl2 = 0"
"r_icp_filtered": 100,
"attached_condition": "t1.fl2 = 0",
"r_filtered": 100
}
}
]
......@@ -412,16 +414,18 @@ ANALYZE
"loops": 1,
"r_loops": 1,
"rows": 1,
"r_index_rows": 1,
"r_rows": 1,
"cost": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"r_icp_filtered": 100,
"filtered": 49.20000076,
"r_filtered": 100,
"r_total_filtered": 100,
"index_condition": "t1.nm like '500%'",
"attached_condition": "t1.fl2 = 0"
"r_icp_filtered": 100,
"attached_condition": "t1.fl2 = 0",
"r_filtered": 100
}
}
]
......@@ -509,14 +513,16 @@ ANALYZE
"loops": 1,
"r_loops": 1,
"rows": 55,
"r_index_rows": 100,
"r_rows": 2,
"cost": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 1.149999976,
"r_filtered": 100,
"attached_condition": "t1.nm like '75%'"
"r_total_filtered": 2,
"attached_condition": "t1.nm like '75%'",
"r_filtered": 100
}
}
]
......@@ -613,16 +619,18 @@ ANALYZE
"loops": 1,
"r_loops": 1,
"rows": 44,
"r_index_rows": 44,
"r_rows": 44,
"cost": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"r_icp_filtered": 100,
"filtered": 8.630000114,
"r_filtered": 0,
"r_total_filtered": 0,
"index_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'",
"attached_condition": "t1.fl2 = 0"
"r_icp_filtered": 100,
"attached_condition": "t1.fl2 = 0",
"r_filtered": 0
}
}
]
......@@ -671,16 +679,18 @@ ANALYZE
"loops": 1,
"r_loops": 1,
"rows": 44,
"r_index_rows": 0,
"r_rows": 0,
"cost": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"r_icp_filtered": 100,
"filtered": 8.529999733,
"r_filtered": 100,
"r_total_filtered": 100,
"index_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'",
"attached_condition": "t1.fl2 = 0"
"r_icp_filtered": 100,
"attached_condition": "t1.fl2 = 0",
"r_filtered": 100
}
}
]
......
......@@ -431,6 +431,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
This diff is collapsed.
......@@ -2905,6 +2905,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -2933,8 +2934,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "<nop>(<in_optimizer>(t1.b,(subquery#3) >= 4))"
"r_total_filtered": 50,
"attached_condition": "<nop>(<in_optimizer>(t1.b,(subquery#3) >= 4))",
"r_filtered": 50
}
}
],
......@@ -2959,6 +2961,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
......@@ -66,6 +66,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -94,8 +95,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
"r_total_filtered": 18.75,
"attached_condition": "t1.b = t2.c",
"r_filtered": 18.75
}
}
]
......@@ -131,6 +133,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......@@ -167,8 +170,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
"r_total_filtered": 18.75,
"attached_condition": "t1.b = t2.c",
"r_filtered": 18.75
}
}
]
......@@ -211,8 +215,9 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
"r_total_filtered": 18.75,
"attached_condition": "t1.b = t2.c",
"r_filtered": 18.75
}
}
]
......
......@@ -3895,6 +3895,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
......@@ -3901,6 +3901,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
}
......
......@@ -253,6 +253,7 @@ ANALYZE
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100
}
},
......@@ -273,6 +274,7 @@ ANALYZE
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 100,
"r_total_filtered": 100,
"r_filtered": 100,
"materialized": {
"query_block": {
......
......@@ -236,6 +236,12 @@ class Table_access_tracker
? static_cast<double>(r_rows) / static_cast<double>(r_scans)
: 0;
}
double get_avg_rows_after_where() const
{
return r_scans
? static_cast<double>(r_rows_after_where) / static_cast<double>(r_scans)
: 0;
}
double get_filtered_after_where() const
{
......
......@@ -1804,28 +1804,9 @@ void Explain_table_access::tag_to_json(Json_writer *writer,
writer->add_member("open_frm_only").add_bool(true);
break;
case ET_USING_INDEX_CONDITION:
writer->add_member("index_condition");
write_item(writer, pushed_index_cond);
break;
case ET_USING_INDEX_CONDITION_BKA:
writer->add_member("index_condition_bka");
write_item(writer, pushed_index_cond);
break;
case ET_USING_WHERE:
{
/*
We are printing the condition that is checked when scanning this
table.
- when join buffer is used, it is cache_cond.
- in other cases, it is where_cond.
*/
Item *item= bka_type.is_using_jbuf()? cache_cond: where_cond;
if (item)
{
writer->add_member("attached_condition");
write_item(writer, item);
}
}
/* Conditions are printed outside of this function */
break;
case ET_USING_INDEX:
writer->add_member("using_index").add_bool(true);
......@@ -2089,9 +2070,47 @@ void Explain_table_access::print_explain_json(Explain_query *query,
if (rows_set)
writer->add_member("rows").add_ull(rows);
/* `r_rows` */
double r_index_rows; /* protected by have_icp_or_rowid_filter */
bool r_index_rows_is_zero; /* also protected by have_icp_or_rowid_filter */
bool have_icp_or_rowid_filter= false;
/* `r_index_rows` and `r_rows` */
if (is_analyze)
{
/*
r_index_rows is the number of rows enumerated in the index before
any kind of checking. The number is the average across all scans.
*/
double loops;
if (tracker.get_loops())
loops = rows2double(tracker.get_loops());
else
loops= 1.0;
handler *file= handler_for_stats;
if (file && file->handler_stats && file->pushed_idx_cond)
{
/*
Pushed Index Condition is checked before checking the Rowid Filter,
so try getting it first.
*/
ulonglong val= file->handler_stats->icp_attempts;
r_index_rows_is_zero= (val == 0);
r_index_rows= val / loops;
have_icp_or_rowid_filter= true;
}
else if (rowid_filter)
{
/* If ICP wasn't used, get the number from Rowid Filter */
uint val= rowid_filter->tracker->get_container_lookups();
r_index_rows_is_zero= (val == 0);
r_index_rows= val / loops;
have_icp_or_rowid_filter= true;
}
/* Print r_index_rows only if ICP and/or Rowid Filter were used */
if (have_icp_or_rowid_filter)
writer->add_member("r_index_rows").add_double(r_index_rows);
writer->add_member("r_rows");
if (pre_join_sort)
{
......@@ -2124,35 +2143,101 @@ void Explain_table_access::print_explain_json(Explain_query *query,
writer->add_member("r_other_time_ms").add_double(extra_time_tracker.get_time_ms());
}
trace_engine_stats(handler_for_stats, writer);
print_r_icp_filtered(handler_for_stats, tracker, writer);
}
/* `filtered` */
if (filtered_set)
writer->add_member("filtered").add_double(filtered);
/* `r_filtered` */
bool have_r_filtered= false;
double r_filtered;
/* Compute value of `r_filtered` - filtered of attached_condition */
if (is_analyze)
{
writer->add_member("r_filtered");
if (pre_join_sort)
{
/* Get r_filtered value from filesort */
if (pre_join_sort->tracker.get_r_loops())
writer->add_double(pre_join_sort->tracker.get_r_filtered()*100);
else
writer->add_null();
{
have_r_filtered= true;
r_filtered= pre_join_sort->tracker.get_r_filtered()*100;
}
}
else
{
/* Get r_filtered from the NL-join runtime */
if (tracker.has_scans())
writer->add_double(tracker.get_filtered_after_where()*100.0);
{
have_r_filtered= true;
r_filtered= tracker.get_filtered_after_where()*100.0;
}
}
/*
Add r_total_filtered, as combined "filtered" of all kinds of filtering:
Rowid Filter, Index Condition Pushdown, attached condition.
*/
double r_total_filtered;
if (have_icp_or_rowid_filter)
{
double out_rows;
if (pre_join_sort)
out_rows= pre_join_sort->tracker.get_avg_returned_rows();
else
writer->add_null();
out_rows= tracker.get_avg_rows_after_where();
if (r_index_rows_is_zero)
r_total_filtered= 100.0;
else
r_total_filtered= out_rows* 100.0 / r_index_rows;
}
else if (have_r_filtered)
r_total_filtered= r_filtered;
writer->add_member("r_total_filtered");
if (have_r_filtered)
writer->add_double(r_total_filtered);
else
writer->add_null();
}
/*
`index_condition[_bka]`
*/
if (pushed_index_cond)
{
writer->add_member(bka_type.is_bka? "index_condition_bka": "index_condition");
write_item(writer, pushed_index_cond);
if (is_analyze)
print_r_icp_filtered(handler_for_stats, writer);
}
/* `attached_condition` */
{
/*
we are printing the condition that is checked when scanning this
table.
- when join buffer is used, it is cache_cond.
- in other cases, it is where_cond.
*/
Item *item= bka_type.is_using_jbuf()? cache_cond: where_cond;
if (item)
{
writer->add_member("attached_condition");
write_item(writer, item);
}
}
/* `r_filtered` - filtered of attached_condition */
if (is_analyze)
{
writer->add_member("r_filtered");
if (have_r_filtered)
writer->add_double(r_filtered);
else
writer->add_null();
}
for (int i=0; i < (int)extra_tags.elements(); i++)
{
tag_to_json(writer, extra_tags.at(i));
......@@ -2787,12 +2872,12 @@ void Explain_update::print_explain_json(Explain_query *query,
if (mrr_type.length() != 0)
writer->add_member("mrr_type").add_str(mrr_type.ptr());
double UNINIT_VAR(r_filtered); /* set and used when is_analyze==true */
if (is_analyze)
{
if (doing_buffering)
{
ha_rows r_rows;
double r_filtered;
if (is_using_filesort())
{
......@@ -2811,7 +2896,8 @@ void Explain_update::print_explain_json(Explain_query *query,
r_filtered= buf_tracker.get_filtered_after_where() * 100.0;
}
writer->add_member("r_rows").add_ull(r_rows);
writer->add_member("r_filtered").add_double(r_filtered);
/* Currently r_total_filtered == r_filtered for DMLs */
writer->add_member("r_total_filtered").add_double(r_filtered);
}
else /* Not doing buffering */
{
......@@ -2822,8 +2908,9 @@ void Explain_update::print_explain_json(Explain_query *query,
writer->add_null();
/* There is no 'filtered' estimate in UPDATE/DELETE atm */
double r_filtered= tracker.get_filtered_after_where() * 100.0;
writer->add_member("r_filtered").add_double(r_filtered);
r_filtered= tracker.get_filtered_after_where() * 100.0;
/* Currently r_total_filtered == r_filtered for DMLs */
writer->add_member("r_total_filtered").add_double(r_filtered);
}
if (table_tracker.has_timed_statistics())
......@@ -2841,6 +2928,9 @@ void Explain_update::print_explain_json(Explain_query *query,
write_item(writer, where_cond);
}
if (is_analyze)
writer->add_member("r_filtered").add_double(r_filtered);
/*** The part of plan that is before the buffering/sorting ends here ***/
if (is_using_filesort())
writer->end_object();
......
......@@ -604,7 +604,7 @@ enum explain_extra_tag
class EXPLAIN_BKA_TYPE
{
public:
EXPLAIN_BKA_TYPE() : join_alg(NULL) {}
EXPLAIN_BKA_TYPE() : join_alg(NULL), is_bka(false) {}
size_t join_buffer_size;
......@@ -616,6 +616,9 @@ class EXPLAIN_BKA_TYPE
*/
const char *join_alg;
/* true <=> BKA is used */
bool is_bka;
/* Information about MRR usage. */
StringBuffer<64> mrr_type;
......@@ -676,14 +679,6 @@ class Explain_rowid_filter : public Sql_alloc
void print_explain_json(Explain_query *query, Json_writer *writer,
bool is_analyze);
/*
TODO:
Here should be ANALYZE members:
- r_rows for the quick select
- An object that tracked the table access time
- real selectivity of the filter.
*/
};
......@@ -870,7 +865,7 @@ class Explain_table_access : public Sql_alloc
/*
This is either pushed index condition, or BKA's index condition.
(the latter refers to columns of other tables and so can only be checked by
BKA code). Examine extra_tags to tell which one it is.
BKA code). Examine extra_tags (or bka_type.is_bka) to tell which one it is.
*/
Item *pushed_index_cond;
......
......@@ -2718,6 +2718,7 @@ bool JOIN_CACHE::save_explain_data(EXPLAIN_BKA_TYPE *explain)
explain->incremental= MY_TEST(prev_cache);
explain->join_buffer_size= get_join_buffer_size();
explain->is_bka= false;
switch (get_join_alg()) {
case BNL_JOIN_ALG:
......@@ -2728,9 +2729,11 @@ bool JOIN_CACHE::save_explain_data(EXPLAIN_BKA_TYPE *explain)
break;
case BKA_JOIN_ALG:
explain->join_alg= "BKA";
explain->is_bka= true;
break;
case BKAH_JOIN_ALG:
explain->join_alg= "BKAH";
explain->is_bka= true;
break;
default:
DBUG_ASSERT(0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment