1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

MDEV-30806: ANALYZE FORMAT=JSON: better support for BNL and BNL-H joins

In block-nl-join, add:

- r_loops - this shows how many incoming record combinations this
  query plan node had.

- r_effective_rows - this shows the average number of matching rows
  that this table had for each incoming record combination. This is
  comparable with r_rows in non-blocked access methods.
  For BNL-joins, it is always equal to
   $.table.r_rows * $.table.r_filtered
  For BNL-H joins the value cannot be computed from other values

Reviewed by: Monty <monty@mariadb.org>
This commit is contained in:
Sergei Petrunia
2023-03-07 19:49:57 +03:00
parent 169def14f6
commit dc1d6213f9
14 changed files with 279 additions and 30 deletions

View File

@ -151,7 +151,9 @@ ANALYZE
"buffer_type": "flat",
"buffer_size": "1Kb",
"join_type": "BNL",
"r_filtered": 100
"r_loops": 20,
"r_filtered": 100,
"r_effective_rows": 60
}
}
}
@ -192,7 +194,9 @@ ANALYZE
"buffer_size": "1Kb",
"join_type": "BNL",
"attached_condition": "tbl1.c > tbl2.c",
"r_filtered": 15.83333333
"r_loops": 20,
"r_filtered": 15.83333333,
"r_effective_rows": 60
}
}
}
@ -652,7 +656,9 @@ ANALYZE
"buffer_size": "65",
"join_type": "BNL",
"attached_condition": "<in_optimizer>(t2.b,t2.b in (subquery#2))",
"r_filtered": null
"r_loops": 2,
"r_filtered": null,
"r_effective_rows": 0
},
"subqueries": [
{
@ -742,7 +748,9 @@ ANALYZE
"buffer_type": "flat",
"buffer_size": "1",
"join_type": "BNL",
"r_filtered": null
"r_loops": 2,
"r_filtered": null,
"r_effective_rows": 0
},
"subqueries": [
{
@ -774,7 +782,9 @@ ANALYZE
"buffer_size": "65",
"join_type": "BNL",
"attached_condition": "t2.f2 = t3.f3",
"r_filtered": null
"r_loops": 0,
"r_filtered": null,
"r_effective_rows": null
}
}
}
@ -849,3 +859,123 @@ ANALYZE
}
}
drop table t0,t1,t2;
#
# MDEV-30806: ANALYZE FORMAT=JSON: better support for BNL and BNL-H joins
#
create table t10 (
a int,
b int
);
insert into t10 select seq, seq/3 from seq_0_to_999;
create table t11 (
a int,
b int
);
insert into t11 select seq, seq/5 from seq_0_to_999;
analyze table t10,t11 persistent for all;
Table Op Msg_type Msg_text
test.t10 analyze status Engine-independent statistics collected
test.t10 analyze status OK
test.t11 analyze status Engine-independent statistics collected
test.t11 analyze status OK
analyze format=json
select * from t10, t11
where
t10.a < 700 and
t11.a < 100
and t10.b=t11.b;
ANALYZE
{
"query_block": {
"select_id": 1,
"r_loops": 1,
"r_total_time_ms": "REPLACED",
"table": {
"table_name": "t11",
"access_type": "ALL",
"r_loops": 1,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 10.15625,
"r_filtered": 10,
"attached_condition": "t11.a < 100"
},
"block-nl-join": {
"table": {
"table_name": "t10",
"access_type": "ALL",
"r_loops": 1,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 70.3125,
"r_filtered": 70,
"attached_condition": "t10.a < 700"
},
"buffer_type": "flat",
"buffer_size": "1Kb",
"join_type": "BNL",
"attached_condition": "t10.b = t11.b",
"r_loops": 100,
"r_filtered": 0.424285714,
"r_effective_rows": 700
}
}
}
set @tmp=@@join_cache_level, join_cache_level=6;
analyze format=json
select * from t10, t11
where
t10.a < 700 and
t11.a < 100
and t10.b=t11.b;
ANALYZE
{
"query_block": {
"select_id": 1,
"r_loops": 1,
"r_total_time_ms": "REPLACED",
"table": {
"table_name": "t11",
"access_type": "ALL",
"r_loops": 1,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 10.15625,
"r_filtered": 10,
"attached_condition": "t11.a < 100 and t11.b is not null"
},
"block-nl-join": {
"table": {
"table_name": "t10",
"access_type": "hash_ALL",
"key": "#hash#$hj",
"key_length": "5",
"used_key_parts": ["b"],
"ref": ["test.t11.b"],
"r_loops": 1,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"filtered": 70.3125,
"r_filtered": 70,
"attached_condition": "t10.a < 700"
},
"buffer_type": "flat",
"buffer_size": "3Kb",
"join_type": "BNLH",
"attached_condition": "t10.b = t11.b",
"r_loops": 100,
"r_filtered": 100,
"r_effective_rows": 2.97
}
}
}
set join_cache_level=@tmp;
drop table t10, t11;