summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/analyze_stmt_orderby.result70
-rw-r--r--mysql-test/r/explain_json.result32
-rw-r--r--mysql-test/r/explain_json_format_partitions.result25
-rw-r--r--mysql-test/t/analyze_stmt_orderby.test4
-rw-r--r--sql/sql_explain.cc20
5 files changed, 103 insertions, 48 deletions
diff --git a/mysql-test/r/analyze_stmt_orderby.result b/mysql-test/r/analyze_stmt_orderby.result
index d26d32180c1..76c51b2beb1 100644
--- a/mysql-test/r/analyze_stmt_orderby.result
+++ b/mysql-test/r/analyze_stmt_orderby.result
@@ -169,25 +169,27 @@ EXPLAIN
{
"query_block": {
"select_id": 1,
- "temporary_table": {
- "function": "buffer",
- "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": ["a"],
- "key": "a",
- "key_length": "5",
- "used_key_parts": ["a"],
- "ref": ["test.t0.a"],
- "rows": 1,
- "filtered": 100
+ "filesort": {
+ "temporary_table": {
+ "function": "buffer",
+ "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": ["a"],
+ "key": "a",
+ "key_length": "5",
+ "used_key_parts": ["a"],
+ "ref": ["test.t0.a"],
+ "rows": 1,
+ "filtered": 100
+ }
}
}
}
@@ -240,6 +242,36 @@ select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where; Using filesort
1 SIMPLE t2 ref a a 5 test.t0.a 1
+explain format=json
+select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "read_sorted_file": {
+ "filesort": {
+ "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": ["a"],
+ "key": "a",
+ "key_length": "5",
+ "used_key_parts": ["a"],
+ "ref": ["test.t0.a"],
+ "rows": 1,
+ "filtered": 100
+ }
+ }
+}
analyze format=json
select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
ANALYZE
diff --git a/mysql-test/r/explain_json.result b/mysql-test/r/explain_json.result
index 1d3f8e82718..e08cd9780fd 100644
--- a/mysql-test/r/explain_json.result
+++ b/mysql-test/r/explain_json.result
@@ -479,13 +479,15 @@ EXPLAIN
"materialized": {
"query_block": {
"select_id": 2,
- "temporary_table": {
- "function": "buffer",
- "table": {
- "table_name": "t1",
- "access_type": "ALL",
- "rows": 10,
- "filtered": 100
+ "filesort": {
+ "temporary_table": {
+ "function": "buffer",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
}
}
}
@@ -521,13 +523,15 @@ EXPLAIN
"materialized": {
"query_block": {
"select_id": 2,
- "temporary_table": {
- "function": "buffer",
- "table": {
- "table_name": "t1",
- "access_type": "ALL",
- "rows": 10,
- "filtered": 100
+ "filesort": {
+ "temporary_table": {
+ "function": "buffer",
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
}
}
}
diff --git a/mysql-test/r/explain_json_format_partitions.result b/mysql-test/r/explain_json_format_partitions.result
index 6a133ff1149..fa2b5681120 100644
--- a/mysql-test/r/explain_json_format_partitions.result
+++ b/mysql-test/r/explain_json_format_partitions.result
@@ -48,17 +48,19 @@ ANALYZE
{
"query_block": {
"select_id": 1,
- "table": {
- "update": 1,
- "table_name": "t1",
- "partitions": ["p0"],
- "access_type": "ALL",
- "rows": 10,
- "r_rows": 3,
- "r_filtered": 100,
- "using_io_buffer": 1,
- "r_total_time_ms": "REPLACED",
- "attached_condition": "(t1.a in (2,3,4))"
+ "r_total_time_ms": "REPLACED",
+ "buffer": {
+ "table": {
+ "update": 1,
+ "table_name": "t1",
+ "partitions": ["p0"],
+ "access_type": "ALL",
+ "rows": 10,
+ "r_rows": 10,
+ "r_filtered": 30,
+ "r_total_time_ms": "REPLACED",
+ "attached_condition": "(t1.a in (2,3,4))"
+ }
}
}
}
@@ -67,6 +69,7 @@ ANALYZE
{
"query_block": {
"select_id": 1,
+ "r_total_time_ms": "REPLACED",
"table": {
"delete": 1,
"table_name": "t1",
diff --git a/mysql-test/t/analyze_stmt_orderby.test b/mysql-test/t/analyze_stmt_orderby.test
index 096bebbf147..4c4a58d954e 100644
--- a/mysql-test/t/analyze_stmt_orderby.test
+++ b/mysql-test/t/analyze_stmt_orderby.test
@@ -63,8 +63,8 @@ select * from t0,t2 where t2.a=t0.a order by t2.b limit 4;
--echo #
explain
select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
-## explain format=json
-## select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
+explain format=json
+select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
--replace_regex /"r_total_time_ms": [0-9]*[.]?[0-9]*/"r_total_time_ms": "REPLACED"/
analyze format=json
select * from t0,t2 where t2.a=t0.a order by t0.a limit 4;
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index 89df39c180c..aad4da7eb8b 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -818,9 +818,19 @@ void Explain_select::print_explain_json(Explain_query *query,
if (using_temporary)
{
started_objects= 1;
+ if (using_filesort)
+ {
+ started_objects++;
+ writer->add_member("filesort").start_object();
+ }
writer->add_member("temporary_table").start_object();
writer->add_member("function").add_str("buffer");
}
+ else
+ {
+ if (using_filesort)
+ first_table_sort= &ops_tracker.filesort_tracker[0];
+ }
}
Explain_basic_join::print_explain_json_interns(query, writer, is_analyze,
@@ -1293,7 +1303,12 @@ void add_json_keyset(Json_writer *writer, const char *elem_name,
/*
@param fs_tracker Normally NULL. When not NULL, it means that the join tab
- used filesort.
+ used filesort to pre-sort the data. Then, sorted data
+ was read and the rest of the join was executed.
+
+ @note
+ EXPLAIN command will check whether fs_tracker is present, but it can't use
+ any value from fs_tracker (these are only valid for ANALYZE).
*/
void Explain_table_access::print_explain_json(Explain_query *query,
@@ -1330,7 +1345,8 @@ void Explain_table_access::print_explain_json(Explain_query *query,
}
}
writer->add_member("filesort").start_object();
- fs_tracker->print_json(writer);
+ if (is_analyze)
+ fs_tracker->print_json(writer);
}
if (bka_type.is_using_jbuf())