diff options
Diffstat (limited to 'sql/sql_explain.cc')
-rw-r--r-- | sql/sql_explain.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 268555db545..ccd23b8e57c 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -787,12 +787,19 @@ void Explain_select::print_explain_json(Explain_query *query, } writer->add_member("filesort").start_object(); started_objects++; + + uint nr= ops_tracker.action_index[i]; + ops_tracker.filesort_tracker[nr].print_json(writer); } else if (ops_tracker.qep_actions[i] == EXPL_ACTION_TEMPTABLE) { writer->add_member("temporary_table").start_object(); started_objects++; - /* + + uint nr= ops_tracker.action_index[i]; + enum_tmp_table_use tmp= ops_tracker.tmp_table_kind[nr]; + const char *func; + if (tmp == EXPL_TMP_TABLE_BUFFER) func= "buffer"; else if (tmp == EXPL_TMP_TABLE_GROUP) @@ -800,7 +807,6 @@ void Explain_select::print_explain_json(Explain_query *query, else func= "distinct"; writer->add_member("function").add_str(func); - */ } else if (ops_tracker.qep_actions[i] == EXPL_ACTION_REMOVE_DUPS) { @@ -824,7 +830,14 @@ void Explain_select::print_explain_json(Explain_query *query, writer->add_member("filesort").start_object(); } writer->add_member("temporary_table").start_object(); - writer->add_member("function").add_str("buffer"); + /* + Don't: + //writer->add_member("function").add_str("buffer"); + we can't really tell. For example, there is a common case where + filesort reads from group-by table. + psergey-todo: get a reasonably accurate condition that catches + GROUP BY in common cases. + */ } else { |