mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Fixed bug #14292: performance degradation for a benchmark query.
This performance degradation was due to the fact that some cost evaluation code added into 4.1 in the function find_best was not merged into the code of the function best_access_path added together with other code for greedy optimizer. Added a parameter to the function print_plan. The parameter contains accumulated cost for a given partial join. The patch does not include a special test case since this performance degradation is hard to reproduse with a simple example. TODO: make the function find_best use the function best_access_path in order to remove duplication of code which might result in incomplete merges in the future. mysql-test/r/delete.result: Fixed bug #14292: performance degradation for a benchmark query. Adjusted test results. mysql-test/r/subselect.result: Fixed bug #14292: performance degradation for a benchmark query. Adjusted test results. sql/mysql_priv.h: Fixed bug #14292: performance degradation for a benchmark query. Added a parameter to the function print_plan. The parameter contains accumulated cost for a given partial join. sql/sql_select.cc: Fixed bug #14292: performance degradation for a benchmark query. This performance degradation was due to the fact that some cost evaluation code added into 4.1 in the function find_best was not merged into the code of the function best_access_path added together with other code for greedy optimizer. sql/sql_test.cc: Fixed bug #14292: performance degradation for a benchmark query. Added a parameter to the function print_plan. The parameter contains accumulated cost for a given partial join.
This commit is contained in:
@ -230,8 +230,8 @@ TEST_join(JOIN *join)
|
||||
*/
|
||||
|
||||
void
|
||||
print_plan(JOIN* join, double read_time, double record_count,
|
||||
uint idx, const char *info)
|
||||
print_plan(JOIN* join, uint idx, double record_count, double read_time,
|
||||
double current_read_time, const char *info)
|
||||
{
|
||||
uint i;
|
||||
POSITION pos;
|
||||
@ -245,13 +245,15 @@ print_plan(JOIN* join, double read_time, double record_count,
|
||||
DBUG_LOCK_FILE;
|
||||
if (join->best_read == DBL_MAX)
|
||||
{
|
||||
fprintf(DBUG_FILE,"%s; idx:%u, best: DBL_MAX, current:%g\n",
|
||||
info, idx, read_time);
|
||||
fprintf(DBUG_FILE,
|
||||
"%s; idx:%u, best: DBL_MAX, atime: %g, itime: %g, count: %g\n",
|
||||
info, idx, current_read_time, read_time, record_count);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(DBUG_FILE,"%s; idx: %u, best: %g, current: %g\n",
|
||||
info, idx, join->best_read, read_time);
|
||||
fprintf(DBUG_FILE,
|
||||
"%s; idx:%u, best: %g, atime: %g, itime: %g, count: %g\n",
|
||||
info, idx, join->best_read, current_read_time, read_time, record_count);
|
||||
}
|
||||
|
||||
/* Print the tables in JOIN->positions */
|
||||
|
Reference in New Issue
Block a user