mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/psergey/mysql-5.0
This commit is contained in:
commit
82270288de
3 changed files with 22 additions and 10 deletions
|
@ -270,6 +270,11 @@ explain select * from t0,t1 where t0.key1 = 5 and
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 ref i1 i1 4 const 1 Using where
|
||||
1 SIMPLE t1 index_merge i1,i8 i1,i8 4,4 NULL 2 Using where
|
||||
explain select * from t0,t1 where t0.key1 < 3 and
|
||||
(t1.key1 = t0.key1 or t1.key8 = t0.key1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 range i1 i1 4 NULL 3 Using where
|
||||
1 SIMPLE t1 ALL i1,i8 NULL NULL NULL 1024 Range checked for each record (index map: 0x81)
|
||||
explain select * from t1 where key1=3 or key2=4
|
||||
union select * from t1 where key1<4 or key3=5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
|
|
|
@ -237,6 +237,10 @@ select * from t0,t1 where (t0.key1=t1.key1) and
|
|||
explain select * from t0,t1 where t0.key1 = 5 and
|
||||
(t1.key1 = t0.key1 or t1.key8 = t0.key1);
|
||||
|
||||
# Fix for bug#1974
|
||||
explain select * from t0,t1 where t0.key1 < 3 and
|
||||
(t1.key1 = t0.key1 or t1.key8 = t0.key1);
|
||||
|
||||
# index_merge inside union
|
||||
explain select * from t1 where key1=3 or key2=4
|
||||
union select * from t1 where key1<4 or key3=5;
|
||||
|
|
|
@ -1018,6 +1018,7 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
|||
List_iterator_fast<SEL_IMERGE> it(tree->merges);
|
||||
while ((imerge= it++))
|
||||
{
|
||||
bool imerge_failed= false;
|
||||
double imerge_cost= 0;
|
||||
ha_rows imerge_total_records= 0;
|
||||
double tree_read_time;
|
||||
|
@ -1036,21 +1037,23 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
|||
&tree_read_time, &tree_records,
|
||||
&(imerge->best_keys[ptree -
|
||||
imerge->trees])))
|
||||
goto imerge_fail;
|
||||
|
||||
imerge_failed= true;
|
||||
imerge_cost += tree_read_time;
|
||||
imerge_total_records += tree_records;
|
||||
}
|
||||
imerge_total_records= min(imerge_total_records,
|
||||
head->file->records);
|
||||
imerge_cost += imerge_total_records / TIME_FOR_COMPARE;
|
||||
if (imerge_cost < min_imerge_cost)
|
||||
|
||||
if (!imerge_failed)
|
||||
{
|
||||
min_imerge= imerge;
|
||||
min_imerge_cost= imerge_cost;
|
||||
min_imerge_records= imerge_total_records;
|
||||
imerge_total_records= min(imerge_total_records,
|
||||
head->file->records);
|
||||
imerge_cost += imerge_total_records / TIME_FOR_COMPARE;
|
||||
if (imerge_cost < min_imerge_cost)
|
||||
{
|
||||
min_imerge= imerge;
|
||||
min_imerge_cost= imerge_cost;
|
||||
min_imerge_records= imerge_total_records;
|
||||
}
|
||||
}
|
||||
imerge_fail:;
|
||||
}
|
||||
|
||||
if (!min_imerge)
|
||||
|
|
Loading…
Reference in a new issue