mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-35958 Cost estimates for materialized derived tables are poor
Backport of commit 74f70c3944
to 10.11.
The new logic is disabled by default, to enable, use
optimizer_adjust_secondary_key_costs=fix_derived_table_read_cost.
== Original commit comment ==
Fixed costs in JOIN_TAB::estimate_scan_time() and HEAP
Estimate_scan_time() calculates the cost of scanning a derivied table.
The old code did not take into account that the temporary table heap table
may be converted to Aria.
Things fixed:
- Added checking if the temporary tables data will fit in the heap.
If not, then calculate the cost based on the designated internal
temporary table engine (Aria).
- Removed MY_MAX(records, 1000) and instead trust the optimizer's
estimate of records. This reduces the cost of temporary tables a bit
for small tables, which caused a few changes in mtr results.
- Fixed cost calculation for HEAP.
- HEAP costs->row_next_find_cost was not set. This does not affect old
costs calculation as this cost slot was not used anywhere.
Now HEAP cost->row_next_find_cost is set, which allowed me to remove
some duplicated computation in ha_heap::scan_time()
This commit is contained in:
@@ -748,7 +748,8 @@ The following specify which files/extra groups are read (specified before remain
|
||||
keys. fix_reuse_range_for_ref = Do a better job at
|
||||
reusing range access estimates when estimating ref
|
||||
access. fix_card_multiplier = Fix the computation in
|
||||
selectivity_for_indexes. selectivity_multiplier. This
|
||||
selectivity_for_indexes. fix_derived_table_read_cost =
|
||||
Fix the cost of reading materialized derived table. This
|
||||
variable will be deleted in MariaDB 11.0 as it is not
|
||||
needed with the new 11.0 optimizer.
|
||||
Use 'ALL' to set all combinations.
|
||||
|
Reference in New Issue
Block a user