1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-34888 Implement SEMIJOIN() and SUBQUERY() hints

This commit is contained in:
Oleg Smirnov
2024-09-11 19:53:57 +07:00
parent e3bf4c826c
commit 2c8f6058c1
28 changed files with 3712 additions and 164 deletions

View File

@@ -140,41 +140,42 @@
#define OPTIMIZER_SWITCH_DERIVED_WITH_KEYS (1ULL << 7)
#define OPTIMIZER_SWITCH_FIRSTMATCH (1ULL << 8)
#define OPTIMIZER_SWITCH_LOOSE_SCAN (1ULL << 9)
#define OPTIMIZER_SWITCH_MATERIALIZATION (1ULL << 10)
#define OPTIMIZER_SWITCH_IN_TO_EXISTS (1ULL << 11)
#define OPTIMIZER_SWITCH_SEMIJOIN (1ULL << 12)
#define OPTIMIZER_SWITCH_PARTIAL_MATCH_ROWID_MERGE (1ULL << 13)
#define OPTIMIZER_SWITCH_PARTIAL_MATCH_TABLE_SCAN (1ULL << 14)
#define OPTIMIZER_SWITCH_SUBQUERY_CACHE (1ULL << 15)
#define OPTIMIZER_SWITCH_DUPSWEEDOUT (1ULL << 10)
#define OPTIMIZER_SWITCH_MATERIALIZATION (1ULL << 11)
#define OPTIMIZER_SWITCH_IN_TO_EXISTS (1ULL << 12)
#define OPTIMIZER_SWITCH_SEMIJOIN (1ULL << 13)
#define OPTIMIZER_SWITCH_PARTIAL_MATCH_ROWID_MERGE (1ULL << 14)
#define OPTIMIZER_SWITCH_PARTIAL_MATCH_TABLE_SCAN (1ULL << 15)
#define OPTIMIZER_SWITCH_SUBQUERY_CACHE (1ULL << 16)
/** If this is off, MRR is never used. */
#define OPTIMIZER_SWITCH_MRR (1ULL << 16)
#define OPTIMIZER_SWITCH_MRR (1ULL << 17)
/**
If OPTIMIZER_SWITCH_MRR is on and this is on, MRR is used depending on a
cost-based choice ("automatic"). If OPTIMIZER_SWITCH_MRR is on and this is
off, MRR is "forced" (i.e. used as long as the storage engine is capable of
doing it).
*/
#define OPTIMIZER_SWITCH_MRR_COST_BASED (1ULL << 17)
#define OPTIMIZER_SWITCH_MRR_SORT_KEYS (1ULL << 18)
#define OPTIMIZER_SWITCH_OUTER_JOIN_WITH_CACHE (1ULL << 19)
#define OPTIMIZER_SWITCH_SEMIJOIN_WITH_CACHE (1ULL << 20)
#define OPTIMIZER_SWITCH_JOIN_CACHE_INCREMENTAL (1ULL << 21)
#define OPTIMIZER_SWITCH_JOIN_CACHE_HASHED (1ULL << 22)
#define OPTIMIZER_SWITCH_JOIN_CACHE_BKA (1ULL << 23)
#define OPTIMIZER_SWITCH_OPTIMIZE_JOIN_BUFFER_SIZE (1ULL << 24)
#define OPTIMIZER_SWITCH_TABLE_ELIMINATION (1ULL << 25)
#define OPTIMIZER_SWITCH_EXTENDED_KEYS (1ULL << 26)
#define OPTIMIZER_SWITCH_EXISTS_TO_IN (1ULL << 27)
#define OPTIMIZER_SWITCH_ORDERBY_EQ_PROP (1ULL << 28)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_DERIVED (1ULL << 29)
#define OPTIMIZER_SWITCH_SPLIT_MATERIALIZED (1ULL << 30)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_SUBQUERY (1ULL << 31)
#define OPTIMIZER_SWITCH_USE_ROWID_FILTER (1ULL << 32)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FROM_HAVING (1ULL << 33)
#define OPTIMIZER_SWITCH_NOT_NULL_RANGE_SCAN (1ULL << 34)
#define OPTIMIZER_SWITCH_HASH_JOIN_CARDINALITY (1ULL << 35)
#define OPTIMIZER_SWITCH_CSET_NARROWING (1ULL << 36)
#define OPTIMIZER_SWITCH_SARGABLE_CASEFOLD (1ULL << 37)
#define OPTIMIZER_SWITCH_MRR_COST_BASED (1ULL << 18)
#define OPTIMIZER_SWITCH_MRR_SORT_KEYS (1ULL << 19)
#define OPTIMIZER_SWITCH_OUTER_JOIN_WITH_CACHE (1ULL << 20)
#define OPTIMIZER_SWITCH_SEMIJOIN_WITH_CACHE (1ULL << 21)
#define OPTIMIZER_SWITCH_JOIN_CACHE_INCREMENTAL (1ULL << 22)
#define OPTIMIZER_SWITCH_JOIN_CACHE_HASHED (1ULL << 23)
#define OPTIMIZER_SWITCH_JOIN_CACHE_BKA (1ULL << 24)
#define OPTIMIZER_SWITCH_OPTIMIZE_JOIN_BUFFER_SIZE (1ULL << 25)
#define OPTIMIZER_SWITCH_TABLE_ELIMINATION (1ULL << 26)
#define OPTIMIZER_SWITCH_EXTENDED_KEYS (1ULL << 27)
#define OPTIMIZER_SWITCH_EXISTS_TO_IN (1ULL << 28)
#define OPTIMIZER_SWITCH_ORDERBY_EQ_PROP (1ULL << 29)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_DERIVED (1ULL << 30)
#define OPTIMIZER_SWITCH_SPLIT_MATERIALIZED (1ULL << 31)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_SUBQUERY (1ULL << 32)
#define OPTIMIZER_SWITCH_USE_ROWID_FILTER (1ULL << 33)
#define OPTIMIZER_SWITCH_COND_PUSHDOWN_FROM_HAVING (1ULL << 34)
#define OPTIMIZER_SWITCH_NOT_NULL_RANGE_SCAN (1ULL << 35)
#define OPTIMIZER_SWITCH_HASH_JOIN_CARDINALITY (1ULL << 36)
#define OPTIMIZER_SWITCH_CSET_NARROWING (1ULL << 37)
#define OPTIMIZER_SWITCH_SARGABLE_CASEFOLD (1ULL << 38)
/*
@@ -208,6 +209,7 @@
OPTIMIZER_SWITCH_SEMIJOIN | \
OPTIMIZER_SWITCH_FIRSTMATCH | \
OPTIMIZER_SWITCH_LOOSE_SCAN | \
OPTIMIZER_SWITCH_DUPSWEEDOUT | \
OPTIMIZER_SWITCH_EXISTS_TO_IN | \
OPTIMIZER_SWITCH_ORDERBY_EQ_PROP | \
OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_DERIVED | \