diff options
author | unknown <istruewing@chilla.local> | 2006-10-11 12:24:59 +0200 |
---|---|---|
committer | unknown <istruewing@chilla.local> | 2006-10-11 12:24:59 +0200 |
commit | ddc5ae38017d67ce5f05fb3fda45e2170e1e08ef (patch) | |
tree | 7eb42042736ff81fb7798ca37b91891a77d8c3c8 /sql/sql_select.cc | |
parent | a6a93d6f19d8e97a4fb4b9b7e51dd76c4dd6c6a6 (diff) | |
download | mariadb-git-ddc5ae38017d67ce5f05fb3fda45e2170e1e08ef.tar.gz |
Bug#12240 - Rows Examined in Slow Log showing incorrect number?
Examined rows are counted for every join part. The per-join-part
counter was incremented over all iterations. The result variable
was replaced at the end of every iteration. The final result was
the number of examined rows by the join part that ended its
execution as the last one. The numbers of other join parts was
lost.
Now we reset the per-join-part counter before every iteration and
add it to the result variable at the end of the iteration. That
way we get the sum of all iterations of all join parts.
No test case. Testing this needs a look into the slow query log.
I don't know of a way to do this portably with the test suite.
sql/sql_select.cc:
Bug#12240 - Rows Examined in Slow Log showing incorrect number?
Fixed reseting and accumulation of examined rows counts.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 74a9fc573c4..5a5c7663365 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1171,12 +1171,13 @@ JOIN::exec() thd->examined_row_count= 0; DBUG_VOID_RETURN; } - /* - don't reset the found rows count if there're no tables - as FOUND_ROWS() may be called. - */ + /* + Don't reset the found rows count if there're no tables as + FOUND_ROWS() may be called. Never reset the examined row count here. + It must be accumulated from all join iterations of all join parts. + */ if (tables) - thd->limit_found_rows= thd->examined_row_count= 0; + thd->limit_found_rows= 0; if (zero_result_cause) { @@ -1224,6 +1225,12 @@ JOIN::exec() List<Item> *curr_all_fields= &all_fields; List<Item> *curr_fields_list= &fields_list; TABLE *curr_tmp_table= 0; + /* + Initialize examined rows here because the values from all join parts + must be accumulated in examined_row_count. Hence every join + iteration must count from zero. + */ + curr_join->examined_rows= 0; /* Create a tmp table if distinct or if the sort is too complicated */ if (need_tmp) @@ -1572,7 +1579,10 @@ JOIN::exec() error= thd->net.report_error ? -1 : do_select(curr_join, curr_fields_list, NULL, procedure); thd->limit_found_rows= curr_join->send_records; - thd->examined_row_count= curr_join->examined_rows; + /* Accumulate the counts from all join iterations of all join parts. */ + thd->examined_row_count+= curr_join->examined_rows; + DBUG_PRINT("counts", ("thd->examined_row_count: %lu", + (ulong) thd->examined_row_count)); DBUG_VOID_RETURN; } @@ -6179,6 +6189,8 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records) return -2; /* purecov: inspected */ } join->examined_rows++; + DBUG_PRINT("counts", ("join->examined_rows++: %lu", + (ulong) join->examined_rows)); join->thd->row_count++; if (!on_expr || on_expr->val_int()) { |