mirror of
https://github.com/MariaDB/server.git
synced 2026-05-07 15:45:33 +02:00
Bug#50843: Filesort used instead of clustered index led to
performance degradation. Filesort + join cache combination is preferred to full index scan because it is usually faster. But it's not the case when the index is clustered one. Now test_if_skip_sort_order function prefers filesort only if index isn't clustered. mysql-test/r/innodb_mysql.result: Added a test case for the bug#50843. mysql-test/t/innodb_mysql.test: Added a test case for the bug#50843. sql/sql_select.cc: Bug#50843: Filesort used instead of clustered index led to performance degradation. Now test_if_skip_sort_order function prefers filesort only if index isn't clustered.
This commit is contained in:
parent
6f78ef71d4
commit
2d4db52eda
3 changed files with 39 additions and 6 deletions
|
|
@ -13304,12 +13304,6 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
|||
*/
|
||||
if (select_limit >= table_records)
|
||||
{
|
||||
/*
|
||||
filesort() and join cache are usually faster than reading in
|
||||
index order and not using join cache
|
||||
*/
|
||||
if (tab->type == JT_ALL && tab->join->tables > tab->join->const_tables + 1)
|
||||
DBUG_RETURN(0);
|
||||
keys= *table->file->keys_to_use_for_scanning();
|
||||
keys.merge(table->covering_keys);
|
||||
|
||||
|
|
@ -13459,6 +13453,19 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
filesort() and join cache are usually faster than reading in
|
||||
index order and not using join cache, except in case that chosen
|
||||
index is clustered primary key.
|
||||
*/
|
||||
if ((select_limit >= table_records) &&
|
||||
(tab->type == JT_ALL &&
|
||||
tab->join->tables > tab->join->const_tables + 1) &&
|
||||
((unsigned) best_key != table->s->primary_key ||
|
||||
!table->file->primary_key_is_clustered()))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (best_key >= 0)
|
||||
{
|
||||
bool quick_created= FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue