mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
EXPLAIN FORMAT=JSON: produce used_key_parts, JSON-ish output for index_merge.
This commit is contained in:
@ -38,13 +38,14 @@ EXPLAIN
|
||||
}
|
||||
}
|
||||
}
|
||||
# Try a basic join
|
||||
create table t1 (a int, b int, filler char(32), key(a));
|
||||
insert into t1
|
||||
select
|
||||
A.a + B.a* 10 + C.a * 100,
|
||||
A.a + B.a* 10 + C.a * 100,
|
||||
a.a + b.a* 10 + c.a * 100,
|
||||
a.a + b.a* 10 + c.a * 100,
|
||||
'filler'
|
||||
from t0 A, t0 B, t0 C;
|
||||
from t0 a, t0 b, t0 c;
|
||||
explain format=json select * from t0,t1 where t1.a=t0.a;
|
||||
EXPLAIN
|
||||
{
|
||||
@ -62,12 +63,116 @@ EXPLAIN
|
||||
"access_type": "ref",
|
||||
"possible_keys": ["a"],
|
||||
"key": "a",
|
||||
"used_key_parts": "TODO",
|
||||
"key_length": "5",
|
||||
"used_key_parts": ["a"],
|
||||
"ref": ["test.t0.a"],
|
||||
"rows": 1,
|
||||
"filtered": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
# Try range and index_merge
|
||||
create table t2 (a1 int, a2 int, b1 int, b2 int, key(a1,a2), key(b1,b2));
|
||||
insert into t2 select a,a,a,a from t1;
|
||||
explain format=json select * from t2 where a1<5;
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t2",
|
||||
"access_type": "range",
|
||||
"possible_keys": ["a1"],
|
||||
"key": "a1",
|
||||
"key_length": "5",
|
||||
"used_key_parts": ["a1"],
|
||||
"rows": 5,
|
||||
"filtered": 100,
|
||||
"index_condition": "(t2.a1 < 5)"
|
||||
}
|
||||
}
|
||||
}
|
||||
explain format=json select * from t2 where a1=1 or b1=2;
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t2",
|
||||
"access_type": "index_merge",
|
||||
"possible_keys": ["a1", "b1"],
|
||||
"key_length": "5,5",
|
||||
"index_merge": {
|
||||
"sort_union": {
|
||||
"range": {
|
||||
"key": "a1",
|
||||
"used_key_parts": ["a1"]
|
||||
},
|
||||
"range": {
|
||||
"key": "b1",
|
||||
"used_key_parts": ["b1"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rows": 2,
|
||||
"filtered": 100,
|
||||
"attached_condition": "((t2.a1 = 1) or (t2.b1 = 2))"
|
||||
}
|
||||
}
|
||||
}
|
||||
explain format=json select * from t2 where a1=1 or (b1=2 and b2=3);
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t2",
|
||||
"access_type": "index_merge",
|
||||
"possible_keys": ["a1", "b1"],
|
||||
"key_length": "5,10",
|
||||
"index_merge": {
|
||||
"sort_union": {
|
||||
"range": {
|
||||
"key": "a1",
|
||||
"used_key_parts": ["a1"]
|
||||
},
|
||||
"range": {
|
||||
"key": "b1",
|
||||
"used_key_parts": ["b1", "b2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rows": 2,
|
||||
"filtered": 100,
|
||||
"attached_condition": "((t2.a1 = 1) or ((t2.b1 = 2) and (t2.b2 = 3)))"
|
||||
}
|
||||
}
|
||||
}
|
||||
# Try ref access on two key components
|
||||
explain format=json select * from t0,t2 where t2.b1=t0.a and t2.b2=4;
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t0",
|
||||
"access_type": "ALL",
|
||||
"rows": 10,
|
||||
"filtered": 100,
|
||||
"attached_condition": "(t0.a is not null)"
|
||||
},
|
||||
"table": {
|
||||
"table_name": "t2",
|
||||
"access_type": "ref",
|
||||
"possible_keys": ["b1"],
|
||||
"key": "b1",
|
||||
"key_length": "10",
|
||||
"used_key_parts": ["b1", "b2"],
|
||||
"ref": ["test.t0.a", "const"],
|
||||
"rows": 1,
|
||||
"filtered": 100
|
||||
}
|
||||
}
|
||||
}
|
||||
drop table t1;
|
||||
drop table t0;
|
||||
|
Reference in New Issue
Block a user