1
0
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:
unknown
2006-05-02 18:31:20 -07:00
parent 6692dcf718
commit 21d61c2be7
5 changed files with 76 additions and 46 deletions

View File

@ -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 */