diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2014-12-06 03:11:03 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2014-12-06 03:11:03 +0300 |
commit | 5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea (patch) | |
tree | ed59f9c4886c2a812e0a954053d1375aad5f63c0 /sql | |
parent | a80a797686e72644e0ad479fdfd2a3b56c4ddf05 (diff) | |
download | mariadb-git-5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea.tar.gz |
EXPLAIN FORMAT=JSON: Full scan on NULL key (join case)
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_explain.cc | 8 | ||||
-rw-r--r-- | sql/sql_explain.h | 3 | ||||
-rw-r--r-- | sql/sql_select.cc | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index ddd37dbbd87..800f2ce309b 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -1139,6 +1139,8 @@ void Explain_table_access::tag_to_json(Json_writer *writer, enum explain_extra_t case ET_START_TEMPORARY: case ET_END_TEMPORARY: /* Handled as "duplicates_removal: { ... } */ + case ET_FULL_SCAN_ON_NULL_KEY: + /* Handled in full_scan_on_null_key */ break; case ET_FIRST_MATCH: writer->add_member("first_match").add_str(firstmatch_table_name.c_ptr()); @@ -1188,6 +1190,9 @@ void Explain_table_access::print_explain_json(Explain_query *query, add_json_keyset(writer, "keys", &possible_keys); } + if (full_scan_on_null_key) + writer->add_member("full-scan-on-null_key").start_object(); + writer->add_member("table").start_object(); writer->add_member("table_name").add_str(table_name); @@ -1289,6 +1294,9 @@ void Explain_table_access::print_explain_json(Explain_query *query, tag_to_json(writer, extra_tags.at(i)); } + if (full_scan_on_null_key) + writer->end_object(); //"full-scan-on-null_key" + if (range_checked_fer) writer->end_object(); // "range-checked-for-each-record" diff --git a/sql/sql_explain.h b/sql/sql_explain.h index ba5a5c2e6ec..a7ef0beb649 100644 --- a/sql/sql_explain.h +++ b/sql/sql_explain.h @@ -562,6 +562,7 @@ public: non_merged_sjm_number(0), extra_tags(root), range_checked_fer(NULL), + full_scan_on_null_key(false), start_dups_weedout(false), end_dups_weedout(false), where_cond(NULL), @@ -634,6 +635,8 @@ public: /* Non-NULL values means this tab uses "range checked for each record" */ Explain_range_checked_fer *range_checked_fer; + + bool full_scan_on_null_key; // valid with ET_USING_JOIN_BUFFER EXPLAIN_BKA_TYPE bka_type; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c923c003fcc..a1231152254 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -23687,6 +23687,7 @@ void JOIN_TAB::save_explain_data(Explain_table_access *eta, table_map prefix_tab if (tab->ref.cond_guards[part]) { eta->push_extra(ET_FULL_SCAN_ON_NULL_KEY); + eta->full_scan_on_null_key= true; break; } } |