1
0
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:
Sergei Petrunia
2025-02-10 14:36:56 +02:00
parent c9fe55ff7a
commit 43c5d1303f
8 changed files with 173 additions and 10 deletions

View File

@@ -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.