summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2014-12-06 03:11:03 +0300
committerSergei Petrunia <psergey@askmonty.org>2014-12-06 03:11:03 +0300
commit5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea (patch)
treeed59f9c4886c2a812e0a954053d1375aad5f63c0 /sql
parenta80a797686e72644e0ad479fdfd2a3b56c4ddf05 (diff)
downloadmariadb-git-5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea.tar.gz
EXPLAIN FORMAT=JSON: Full scan on NULL key (join case)
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_explain.cc8
-rw-r--r--sql/sql_explain.h3
-rw-r--r--sql/sql_select.cc1
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;
}
}