Added optimizer_costs.h which includes all optimizer costs
This makes it easier to see how costs changes over commits
This commit is contained in:
parent
e6205c966d
commit
034aedadf2
@ -174,6 +174,7 @@ SET (SQL_SOURCE
|
||||
sql_tvc.cc sql_tvc.h
|
||||
opt_split.cc
|
||||
rowid_filter.cc rowid_filter.h
|
||||
optimizer_costs.h
|
||||
opt_trace.cc
|
||||
table_cache.cc encryption.cc temporary_tables.cc
|
||||
json_table.cc
|
||||
|
@ -26,6 +26,7 @@
|
||||
#endif
|
||||
|
||||
#include "sql_const.h"
|
||||
#include "optimizer_costs.h"
|
||||
#include "sql_basic_types.h"
|
||||
#include "mysqld.h" /* server_id */
|
||||
#include "sql_plugin.h" /* plugin_ref, st_plugin_int, plugin */
|
||||
|
70
sql/optimizer_costs.h
Normal file
70
sql/optimizer_costs.h
Normal file
@ -0,0 +1,70 @@
|
||||
#ifndef OPTIMIZER_COSTS_INCLUDED
|
||||
#define OPTIMIZER_COSTS_INCLUDED
|
||||
/*
|
||||
Copyright (c) 2022, MariaDB AB
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; version 2 of
|
||||
the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
|
||||
*/
|
||||
|
||||
/* This file includes costs variables used by the optimizer */
|
||||
|
||||
/**
|
||||
The following is used to decide if MySQL should use table scanning
|
||||
instead of reading with keys. The number says how many evaluation of the
|
||||
WHERE clause is comparable to reading one extra row from a table.
|
||||
*/
|
||||
#define TIME_FOR_COMPARE 5.0 // 5 WHERE compares == one read
|
||||
#define TIME_FOR_COMPARE_IDX 20.0
|
||||
|
||||
#define IDX_BLOCK_COPY_COST ((double) 1 / TIME_FOR_COMPARE)
|
||||
#define IDX_LOOKUP_COST ((double) 1 / 8)
|
||||
#define MULTI_RANGE_READ_SETUP_COST (IDX_BLOCK_COPY_COST/10)
|
||||
|
||||
/**
|
||||
Number of comparisons of table rowids equivalent to reading one row from a
|
||||
table.
|
||||
*/
|
||||
#define TIME_FOR_COMPARE_ROWID (TIME_FOR_COMPARE*100)
|
||||
|
||||
/* cost1 is better that cost2 only if cost1 + COST_EPS < cost2 */
|
||||
#define COST_EPS 0.001
|
||||
|
||||
/*
|
||||
For sequential disk seeks the cost formula is:
|
||||
DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST * #blocks_to_skip
|
||||
|
||||
The cost of average seek
|
||||
DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST*BLOCKS_IN_AVG_SEEK =1.0.
|
||||
*/
|
||||
#define DISK_SEEK_BASE_COST ((double)0.9)
|
||||
|
||||
#define BLOCKS_IN_AVG_SEEK 128
|
||||
|
||||
#define DISK_SEEK_PROP_COST ((double)0.1/BLOCKS_IN_AVG_SEEK)
|
||||
|
||||
/*
|
||||
Subquery materialization-related constants
|
||||
*/
|
||||
#define HEAP_TEMPTABLE_LOOKUP_COST 0.05
|
||||
#define DISK_TEMPTABLE_LOOKUP_COST 1.0
|
||||
#define SORT_INDEX_CMP_COST 0.02
|
||||
|
||||
#define COST_MAX (DBL_MAX * (1.0 - DBL_EPSILON))
|
||||
|
||||
#define COST_ADD(c,d) (COST_MAX - (d) > (c) ? (c) + (d) : COST_MAX)
|
||||
|
||||
#define COST_MULT(c,f) (COST_MAX / (f) > (c) ? (c) * (f) : COST_MAX)
|
||||
|
||||
#endif /* OPTIMIZER_COSTS_INCLUDED */
|
@ -199,41 +199,6 @@
|
||||
#define MIN_ROWS_TO_USE_TABLE_CACHE 100
|
||||
#define MIN_ROWS_TO_USE_BULK_INSERT 100
|
||||
|
||||
/**
|
||||
The following is used to decide if MySQL should use table scanning
|
||||
instead of reading with keys. The number says how many evaluation of the
|
||||
WHERE clause is comparable to reading one extra row from a table.
|
||||
*/
|
||||
#define TIME_FOR_COMPARE 5.0 // 5 WHERE compares == one read
|
||||
#define TIME_FOR_COMPARE_IDX 20.0
|
||||
|
||||
#define IDX_BLOCK_COPY_COST ((double) 1 / TIME_FOR_COMPARE)
|
||||
#define IDX_LOOKUP_COST ((double) 1 / 8)
|
||||
#define MULTI_RANGE_READ_SETUP_COST (IDX_BLOCK_COPY_COST/10)
|
||||
|
||||
/**
|
||||
Number of comparisons of table rowids equivalent to reading one row from a
|
||||
table.
|
||||
*/
|
||||
#define TIME_FOR_COMPARE_ROWID (TIME_FOR_COMPARE*100)
|
||||
|
||||
/* cost1 is better that cost2 only if cost1 + COST_EPS < cost2 */
|
||||
#define COST_EPS 0.001
|
||||
|
||||
/*
|
||||
For sequential disk seeks the cost formula is:
|
||||
DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST * #blocks_to_skip
|
||||
|
||||
The cost of average seek
|
||||
DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST*BLOCKS_IN_AVG_SEEK =1.0.
|
||||
*/
|
||||
#define DISK_SEEK_BASE_COST ((double)0.9)
|
||||
|
||||
#define BLOCKS_IN_AVG_SEEK 128
|
||||
|
||||
#define DISK_SEEK_PROP_COST ((double)0.1/BLOCKS_IN_AVG_SEEK)
|
||||
|
||||
|
||||
/**
|
||||
Number of rows in a reference table when refereed through a not unique key.
|
||||
This value is only used when we don't know anything about the key
|
||||
@ -241,21 +206,6 @@
|
||||
*/
|
||||
#define MATCHING_ROWS_IN_OTHER_TABLE 10
|
||||
|
||||
/*
|
||||
Subquery materialization-related constants
|
||||
*/
|
||||
#define HEAP_TEMPTABLE_LOOKUP_COST 0.05
|
||||
#define DISK_TEMPTABLE_LOOKUP_COST 1.0
|
||||
#define SORT_INDEX_CMP_COST 0.02
|
||||
|
||||
|
||||
#define COST_MAX (DBL_MAX * (1.0 - DBL_EPSILON))
|
||||
|
||||
#define COST_ADD(c,d) (COST_MAX - (d) > (c) ? (c) + (d) : COST_MAX)
|
||||
|
||||
#define COST_MULT(c,f) (COST_MAX / (f) > (c) ? (c) * (f) : COST_MAX)
|
||||
|
||||
|
||||
#define MY_CHARSET_BIN_MB_MAXLEN 1
|
||||
|
||||
/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */
|
||||
|
Loading…
x
Reference in New Issue
Block a user