diff options
-rw-r--r-- | mysql-test/r/analyze_stmt_orderby.result | 70 | ||||
-rw-r--r-- | mysql-test/r/explain_json.result | 32 | ||||
-rw-r--r-- | mysql-test/r/explain_json_format_partitions.result | 25 | ||||
-rw-r--r-- | mysql-test/t/analyze_stmt_orderby.test | 4 | ||||
-rw-r--r-- | sql/sql_explain.cc | 20 |
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()) |