2014-08-09 04:37:56 +02:00
|
|
|
drop table if exists t0,t1;
|
|
|
|
create table t0(a int);
|
|
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
|
|
explain format=json select * from t0;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json select * from t0 where 1>2;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"message": "Impossible WHERE"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json select * from t0 where a<3;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100,
|
|
|
|
"attached_condition": "(t0.a < 3)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-08-13 23:12:05 +02:00
|
|
|
# Try a basic join
|
2014-08-12 13:02:09 +02:00
|
|
|
create table t1 (a int, b int, filler char(32), key(a));
|
|
|
|
insert into t1
|
|
|
|
select
|
2014-08-13 23:12:05 +02:00
|
|
|
a.a + b.a* 10 + c.a * 100,
|
|
|
|
a.a + b.a* 10 + c.a * 100,
|
2014-08-12 13:02:09 +02:00
|
|
|
'filler'
|
2014-08-13 23:12:05 +02:00
|
|
|
from t0 a, t0 b, t0 c;
|
2014-08-12 13:02:09 +02:00
|
|
|
explain format=json select * from t0,t1 where t1.a=t0.a;
|
|
|
|
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": "t1",
|
|
|
|
"access_type": "ref",
|
|
|
|
"possible_keys": ["a"],
|
|
|
|
"key": "a",
|
|
|
|
"key_length": "5",
|
2014-08-13 23:12:05 +02:00
|
|
|
"used_key_parts": ["a"],
|
2014-08-12 16:14:56 +02:00
|
|
|
"ref": ["test.t0.a"],
|
2014-08-12 13:02:09 +02:00
|
|
|
"rows": 1,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-08-13 23:12:05 +02:00
|
|
|
# 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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-11-21 19:44:06 +01:00
|
|
|
drop table t1,t2;
|
2014-11-27 17:32:48 +01:00
|
|
|
#
|
|
|
|
# Try a UNION
|
|
|
|
#
|
|
|
|
explain format=json select * from t0 A union select * from t0 B;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"union_result": {
|
|
|
|
"table_name": "<union1,2>",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"query_specifications": [
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "A",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"query_block": {
|
2014-11-28 00:36:31 +01:00
|
|
|
"select_id": 2,
|
2014-11-27 17:32:48 +01:00
|
|
|
"table": {
|
|
|
|
"table_name": "B",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json select * from t0 A union all select * from t0 B;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"union_result": {
|
|
|
|
"table_name": "<union1,2>",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"query_specifications": [
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "A",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"query_block": {
|
2014-11-28 00:36:31 +01:00
|
|
|
"select_id": 2,
|
2014-11-27 17:32:48 +01:00
|
|
|
"table": {
|
|
|
|
"table_name": "B",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#
|
|
|
|
# Subqueries
|
|
|
|
#
|
|
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 select a,a from t0;
|
|
|
|
explain format=json select a, a > (select max(b) from t1 where t1.b=t0.a) from t0;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100
|
|
|
|
},
|
|
|
|
"subqueries": [
|
|
|
|
{
|
|
|
|
"query_block": {
|
2014-11-28 00:36:31 +01:00
|
|
|
"select_id": 2,
|
2014-11-27 17:32:48 +01:00
|
|
|
"table": {
|
|
|
|
"table_name": "t1",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100,
|
|
|
|
"attached_condition": "(t1.b = t0.a)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json
|
|
|
|
select * from t0 where
|
|
|
|
a > (select max(b) from t1 where t1.b=t0.a) or a < 3 ;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100,
|
|
|
|
"attached_condition": "((t0.a > (subquery#2)) or (t0.a < 3))"
|
|
|
|
},
|
|
|
|
"subqueries": [
|
|
|
|
{
|
|
|
|
"query_block": {
|
2014-11-28 00:36:31 +01:00
|
|
|
"select_id": 2,
|
2014-11-27 17:32:48 +01:00
|
|
|
"table": {
|
|
|
|
"table_name": "t1",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"filtered": 100,
|
|
|
|
"attached_condition": "(t1.b = t0.a)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
drop table t1;
|
2014-11-27 21:10:44 +01:00
|
|
|
#
|
|
|
|
# Join buffering
|
|
|
|
#
|
|
|
|
create table t1 (a int, b int);
|
2014-11-28 14:46:05 +01:00
|
|
|
insert into t1 select tbl1.a+10*tbl2.a, tbl1.a+10*tbl2.a from t0 tbl1, t0 tbl2;
|
2014-11-27 21:10:44 +01:00
|
|
|
explain format=json
|
2014-11-28 14:46:05 +01:00
|
|
|
select * from t1 tbl1, t1 tbl2 where tbl1.a=tbl2.a and tbl1.b < 3 and tbl2.b < 5;
|
2014-11-27 21:10:44 +01:00
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
2014-11-28 14:46:05 +01:00
|
|
|
"table_name": "tbl1",
|
2014-11-27 21:10:44 +01:00
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 100,
|
|
|
|
"filtered": 100,
|
2014-11-28 14:46:05 +01:00
|
|
|
"attached_condition": "(tbl1.b < 3)"
|
2014-11-27 21:10:44 +01:00
|
|
|
},
|
|
|
|
"block-nl-join": {
|
|
|
|
"table": {
|
2014-11-28 14:46:05 +01:00
|
|
|
"table_name": "tbl2",
|
2014-11-27 21:10:44 +01:00
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 100,
|
|
|
|
"filtered": 100,
|
2014-11-28 14:46:05 +01:00
|
|
|
"attached_condition": "(tbl2.b < 5)"
|
2014-11-27 21:10:44 +01:00
|
|
|
},
|
|
|
|
"buffer_type": "flat",
|
|
|
|
"join_type": "BNL",
|
2014-11-28 14:46:05 +01:00
|
|
|
"attached_condition": "(tbl2.a = tbl1.a)"
|
2014-11-27 21:10:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
drop table t1;
|
2014-11-28 00:36:31 +01:00
|
|
|
#
|
|
|
|
# Single-table UPDATE/DELETE
|
|
|
|
#
|
|
|
|
explain format=json delete from t0;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"message": "Deleting all rows"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json delete from t0 where 1 > 2;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"message": "Impossible WHERE"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json delete from t0 where a < 3;
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"delete": 1,
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"attached_condition": "(t0.a < 3)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
explain format=json update t0 set a=3 where a in (2,3,4);
|
|
|
|
EXPLAIN
|
|
|
|
{
|
|
|
|
"query_block": {
|
|
|
|
"select_id": 1,
|
|
|
|
"table": {
|
|
|
|
"update": 1,
|
|
|
|
"table_name": "t0",
|
|
|
|
"access_type": "ALL",
|
|
|
|
"rows": 10,
|
|
|
|
"attached_condition": "(t0.a in (2,3,4))"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-08-09 04:37:56 +02:00
|
|
|
drop table t0;
|