mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
better fix for MySQL bugs
BUG#26447 prefer a clustered key for an index scan, as secondary index is always slower ... which was fixed to cause BUG#35850 queries take 50% longer ... and was reverted and BUG#39653 prefer a secondary index for an index scan, as clustered key is always slower ... which was fixed to cause BUG#55656 mysqldump takes six days instead of half an hour ... and was amended with a special case workaround sql/opt_range.cc: move get_index_only_read_time() into the handler class sql/sql_select.cc: use cost not an index length when choosing a cheaper index
This commit is contained in:
@ -13367,7 +13367,7 @@ static int test_if_order_by_key(ORDER *order, TABLE *table, uint idx,
|
||||
|
||||
uint find_shortest_key(TABLE *table, const key_map *usable_keys)
|
||||
{
|
||||
uint min_length= (uint) ~0;
|
||||
double min_cost= DBL_MAX;
|
||||
uint best= MAX_KEY;
|
||||
if (!usable_keys->is_clear_all())
|
||||
{
|
||||
@ -13375,9 +13375,10 @@ uint find_shortest_key(TABLE *table, const key_map *usable_keys)
|
||||
{
|
||||
if (usable_keys->is_set(nr))
|
||||
{
|
||||
if (table->key_info[nr].key_length < min_length)
|
||||
double cost= table->file->keyread_time(nr, 1, table->file->records());
|
||||
if (cost < min_cost)
|
||||
{
|
||||
min_length=table->key_info[nr].key_length;
|
||||
min_cost= cost;
|
||||
best=nr;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user