24#ifndef SQL_RANGE_OPTIMIZER_INDEX_SKIP_SCAN_PLAN_H_
25#define SQL_RANGE_OPTIMIZER_INDEX_SKIP_SCAN_PLAN_H_
179 bool skip_records_in_range,
180 bool force_skip_scan);
183 bool skip_records_in_range,
184 bool force_skip_scan);
A wrapper class which provides array bounds checking.
Definition: sql_array.h:48
Used to store optimizer cost estimates.
Definition: handler.h:4028
Manage cost-related info and cost calculation functions for index skip scans.
Definition: index_skip_scan_plan.h:105
void CalcCardinality()
DESCRIPTION This method computes the parameters used to calculate the access cost of an INDEX_SKIP_SC...
Definition: index_skip_scan_plan.cc:683
Item * m_where_cond
Definition: index_skip_scan_plan.h:111
struct IndexSkipScanCost::IndexSkipScanCardinality m_cardinality
ha_rows GetNumRecords() const
Definition: index_skip_scan_plan.h:172
double GetCostForHypergraph() const
DESCRIPTION This method computes the access cost of an INDEX_SKIP_SCAN access path and the number of ...
Definition: index_skip_scan_plan.cc:779
IndexSkipScanCost(TABLE *tab, uint cur_key, uint keyparts, ha_rows prefix_records, Item *where, Opt_trace_object *trace_idx)
Definition: index_skip_scan_plan.h:142
TABLE * m_table
Definition: index_skip_scan_plan.h:107
Opt_trace_object * m_trace
Definition: index_skip_scan_plan.h:112
ha_rows m_quick_prefix_records
Definition: index_skip_scan_plan.h:110
uint m_key
Definition: index_skip_scan_plan.h:108
Cost_estimate GetCost() const
DESCRIPTION This method computes the access cost of an INDEX_SKIP_SCAN access path and the number of ...
Definition: index_skip_scan_plan.cc:752
uint m_distinct_key_parts
Definition: index_skip_scan_plan.h:109
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:928
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:432
A JSON object (unordered set of key/value pairs).
Definition: opt_trace.h:802
Definition: range_opt_param.h:29
A graph of (possible multiple) key ranges, represented as a red-black binary tree.
Definition: tree.h:69
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
void trace_basic_info_index_skip_scan(THD *thd, const AccessPath *path, const RANGE_OPT_PARAM *param, Opt_trace_object *trace_object)
Definition: index_skip_scan_plan.cc:72
void dbug_dump_index_skip_scan(int indent, bool verbose, const AccessPath *path)
Definition: index_skip_scan_plan.cc:790
Mem_root_array< AccessPath * > get_all_skip_scans(THD *thd, RANGE_OPT_PARAM *param, SEL_TREE *tree, enum_order order_direction, bool skip_records_in_range, bool force_skip_scan)
Test if skip scan is applicable and if so, construct a new AccessPath for each candidate index skip s...
Definition: index_skip_scan_plan.cc:138
AccessPath * get_best_skip_scan(THD *thd, RANGE_OPT_PARAM *param, SEL_TREE *tree, enum_order order_direction, bool skip_records_in_range, bool force_skip_scan)
Test if skip scan is applicable and if so, construct a new AccessPath.
Definition: index_skip_scan_plan.cc:207
enum_order
Definition: key_spec.h:65
This file includes constants used by all storage engines.
my_off_t ha_rows
Definition: my_base.h:1217
unsigned char uchar
Definition: my_inttypes.h:52
static uint verbose
Definition: mysqlcheck.cc:66
static char * path
Definition: mysqldump.cc:150
static char * where
Definition: mysqldump.cc:153
Access paths are a query planning structure that correspond 1:1 to iterators, in that an access path ...
Definition: access_path.h:238
Definition: index_skip_scan_plan.h:53
Bounds_checked_array< uchar * > eq_key_prefixes
Definition: index_skip_scan_plan.h:54
unsigned cur_eq_prefix
Definition: index_skip_scan_plan.h:66
Definition: index_skip_scan_plan.h:114
ha_rows records
Definition: index_skip_scan_plan.h:116
uint num_groups
Definition: index_skip_scan_plan.h:115
Logically a part of AccessPath::index_skip_scan(), but is too large, so split out into its own struct...
Definition: index_skip_scan_plan.h:73
double read_cost
Total cost of read.
Definition: index_skip_scan_plan.h:80
uint eq_prefix_len
Length of the equality prefix.
Definition: index_skip_scan_plan.h:75
uchar * min_range_key
Definition: index_skip_scan_plan.h:83
uint range_cond_flag
Definition: index_skip_scan_plan.h:87
KEY * index_info
The index chosen for data access.
Definition: index_skip_scan_plan.h:74
bool has_aggregate_function
TRUE if there are aggregate functions.
Definition: index_skip_scan_plan.h:99
uint num_output_rows
Definition: index_skip_scan_plan.h:89
uint range_key_len
Definition: index_skip_scan_plan.h:88
uchar * max_search_key
Definition: index_skip_scan_plan.h:86
uchar * max_range_key
Definition: index_skip_scan_plan.h:84
SEL_ROOT * index_range_tree
The sub-tree corresponding to index_info.
Definition: index_skip_scan_plan.h:98
uint used_key_parts
Number of index keys used for skip scan.
Definition: index_skip_scan_plan.h:79
uint eq_prefix_key_parts
Number of key parts in the equality prefix.
Definition: index_skip_scan_plan.h:76
uchar * min_search_key
Definition: index_skip_scan_plan.h:85
KEY_PART_INFO * range_key_part
The key part matching the range condition.
Definition: index_skip_scan_plan.h:78
EQPrefix * eq_prefixes
Array of equality constants (IN list)
Definition: index_skip_scan_plan.h:77
const SEL_ARG * range_part_tracing_only
Definition: index_skip_scan_plan.h:96
uint index
Position of chosen index.
Definition: index_skip_scan_plan.h:81
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83