diff options
| author | Monty <monty@mariadb.org> | 2021-10-09 16:16:10 +0300 |
|---|---|---|
| committer | Sergei Petrunia <sergey@mariadb.com> | 2023-02-02 20:49:35 +0300 |
| commit | 956980971f98e1eb451e71856fe823470a5d1d32 (patch) | |
| tree | 369d47e8f78d05c313d42e24492daaeb15c24e91 /mysql-test/main/join.result | |
| parent | 6fa7451759e0832cc13a0e47a8300292b96bdb75 (diff) | |
| download | mariadb-git-956980971f98e1eb451e71856fe823470a5d1d32.tar.gz | |
Update cost for hash and cached joins
The old code did not't correctly add TIME_FOR_COMPARE to rows that are
part of the scan that will be compared with the attached where clause.
Now the cost calculation for hash join and full join cache join are
identical except for HASH_FANOUT (10%)
The cost for a join with keys is now also uniform.
The total cost for a using a key for lookup is calculated in one place as:
(cost_of_finding_rows_through_key(records) + records/TIME_FOR_COMPARE)*
record_count_of_previous_row_combinations + startup_cost
startup_cost is the cost of a creating a temporary table (if needed)
Best_cost now includes the cost of comparing all WHERE clauses and also
cost of joining with previous row combinations.
Other things:
- Optimizer trace is now printing the total costs, including testing the
WHERE clause (TIME_FOR_COMPARE) and comparing with all previous rows.
- In optimizer trace, include also total cost of query together with the
final join order. This makes it easier to find out where the cost was
calculated.
- Old code used filter even if the cost for it was higher than not using a
filter. This is not corrected.
- When rebasing on 10.11, I noticed some changes to access_cost_factor
calculation. These changes was not picked as the coming changes
to filtering will make that code obsolete.
Diffstat (limited to 'mysql-test/main/join.result')
| -rw-r--r-- | mysql-test/main/join.result | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/mysql-test/main/join.result b/mysql-test/main/join.result index e621197692a..8f75105c30d 100644 --- a/mysql-test/main/join.result +++ b/mysql-test/main/join.result @@ -892,7 +892,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 10 show status like 'Last_query_cost'; Variable_name Value -Last_query_cost 4.016090 +Last_query_cost 6.016090 select 'The cost of accessing t1 (dont care if it changes' '^'; The cost of accessing t1 (dont care if it changes The cost of accessing t1 (dont care if it changes^ @@ -906,7 +906,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE B eq_ref PRIMARY PRIMARY 4 test.A.b 1 show status like 'Last_query_cost'; Variable_name Value -Last_query_cost 28.016090 +Last_query_cost 34.016090 select '^^: The above should be ~= 20 + cost(select * from t1). Value less than 20 is an error' Z; Z ^^: The above should be ~= 20 + cost(select * from t1). Value less than 20 is an error |
