MySQL 8.0.39
Source Code Documentation
|
#include "sql/join_optimizer/estimate_selectivity.h"
#include <sys/types.h>
#include <algorithm>
#include <initializer_list>
#include <string>
#include "my_bitmap.h"
#include "my_table_map.h"
#include "sql/field.h"
#include "sql/handler.h"
#include "sql/histograms/histogram.h"
#include "sql/item.h"
#include "sql/item_cmpfunc.h"
#include "sql/item_func.h"
#include "sql/join_optimizer/bit_utils.h"
#include "sql/join_optimizer/print_utils.h"
#include "sql/key.h"
#include "sql/sql_bitmap.h"
#include "sql/sql_const.h"
#include "sql/sql_select.h"
#include "sql/table.h"
#include "template_utils.h"
Functions | |
static double | EstimateFieldSelectivity (Field *field, double *selectivity_cap, string *trace) |
Estimate the selectivity of (equi)joining a given field to any other field. More... | |
double | EstimateSelectivity (THD *thd, Item *condition, string *trace) |
For the given condition, to try estimate its filtering selectivity, on a 0..1 scale (where 1.0 lets all records through). More... | |
|
static |
Estimate the selectivity of (equi)joining a given field to any other field.
Use cardinality information from indexes, if possible. Otherwise, use a histogram if there is one. Assumes equal distribution and zero correlation between the two fields, so if there are e.g. 100 records and 4 distinct values (A,B,C,D) for the field, it assumes 25% of the values will be A, 25% B, etc. (equal distribution), and thus, when joining a row from some other table against this one, 25% of the records will match (equal distribution, zero correlation).
If there are multiple ones, we choose the one with the largest selectivity (least selective). There are two main reasons for this:
Returns -1.0 if no index or no histogram was found. Lifted from Item_equal::get_filtering_effect.
For the given condition, to try estimate its filtering selectivity, on a 0..1 scale (where 1.0 lets all records through).
TODO(sgunders): In some cases, composite indexes might allow us to do better for joins with multiple predicates.