mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
select.result, select.test:
Added a test case for bug #5333. null_key.result, key_primary.result: Made covering index usable for const tables. sql_select.cc: Made covering index usable for const tables: downported the corresponding code from 4.1. Simultaneously fixed bug #5333 reported for 4.1. The bug was due to the fact that field index in join structures was always set to 0 for const tables.
This commit is contained in:
@ -13,7 +13,7 @@ t1
|
|||||||
AB%
|
AB%
|
||||||
describe select * from t1 where t1="ABC";
|
describe select * from t1 where t1="ABC";
|
||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 const PRIMARY PRIMARY 3 const 1
|
t1 const PRIMARY PRIMARY 3 const 1 Using index
|
||||||
describe select * from t1 where t1="ABCD";
|
describe select * from t1 where t1="ABCD";
|
||||||
Comment
|
Comment
|
||||||
Impossible WHERE noticed after reading const tables
|
Impossible WHERE noticed after reading const tables
|
||||||
|
@ -12,7 +12,7 @@ table type possible_keys key key_len ref rows Extra
|
|||||||
t1 ref a,b a 9 const,const 1 Using where; Using index
|
t1 ref a,b a 9 const,const 1 Using where; Using index
|
||||||
explain select * from t1 where a=2 and b = 2;
|
explain select * from t1 where a=2 and b = 2;
|
||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 const a,b a 9 const,const 1
|
t1 const a,b a 9 const,const 1 Using index
|
||||||
explain select * from t1 where a<=>b limit 2;
|
explain select * from t1 where a<=>b limit 2;
|
||||||
table type possible_keys key key_len ref rows Extra
|
table type possible_keys key key_len ref rows Extra
|
||||||
t1 index NULL a 9 NULL 12 Using where; Using index
|
t1 index NULL a 9 NULL 12 Using where; Using index
|
||||||
|
@ -2327,3 +2327,19 @@ select * from t2,t3 where t2.s = t3.s;
|
|||||||
s s
|
s s
|
||||||
two two
|
two two
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
i int(11) NOT NULL default '0',
|
||||||
|
c char(10) NOT NULL default '',
|
||||||
|
PRIMARY KEY (i),
|
||||||
|
UNIQUE KEY c (c)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (1,'a');
|
||||||
|
INSERT INTO t1 VALUES (2,'b');
|
||||||
|
INSERT INTO t1 VALUES (3,'c');
|
||||||
|
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||||
|
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1874,3 +1874,24 @@ select * from t3 where s = 'one';
|
|||||||
select * from t1,t2 where t1.s = t2.s;
|
select * from t1,t2 where t1.s = t2.s;
|
||||||
select * from t2,t3 where t2.s = t3.s;
|
select * from t2,t3 where t2.s = t3.s;
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Covering index is mentioned in EXPLAIN output for const tables (bug #5333)
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
i int(11) NOT NULL default '0',
|
||||||
|
c char(10) NOT NULL default '',
|
||||||
|
PRIMARY KEY (i),
|
||||||
|
UNIQUE KEY c (c)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1,'a');
|
||||||
|
INSERT INTO t1 VALUES (2,'b');
|
||||||
|
INSERT INTO t1 VALUES (3,'c');
|
||||||
|
|
||||||
|
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
||||||
|
|
||||||
|
EXPLAIN SELECT i FROM t1 WHERE i=1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@ -4901,6 +4901,15 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (!table->key_read &&
|
||||||
|
(table->used_keys & ((key_map) 1 << tab->ref.key)) &&
|
||||||
|
!table->no_keyread &&
|
||||||
|
(int) table->reginfo.lock_type <= (int) TL_READ_HIGH_PRIORITY)
|
||||||
|
{
|
||||||
|
table->key_read=1;
|
||||||
|
table->file->extra(HA_EXTRA_KEYREAD);
|
||||||
|
tab->index= tab->ref.key;
|
||||||
|
}
|
||||||
if ((error=join_read_const(tab)))
|
if ((error=join_read_const(tab)))
|
||||||
{
|
{
|
||||||
tab->info="unique row not found";
|
tab->info="unique row not found";
|
||||||
@ -7617,7 +7626,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
sprintf(buff3,"%.0f",join->best_positions[i].records_read);
|
sprintf(buff3,"%.0f",join->best_positions[i].records_read);
|
||||||
item_list.push_back(new Item_string(buff3,strlen(buff3)));
|
item_list.push_back(new Item_string(buff3,strlen(buff3)));
|
||||||
my_bool key_read=table->key_read;
|
my_bool key_read=table->key_read;
|
||||||
if (tab->type == JT_NEXT &&
|
if ((tab->type == JT_NEXT || tab->type == JT_CONST) &&
|
||||||
((table->used_keys & ((key_map) 1 << tab->index))))
|
((table->used_keys & ((key_map) 1 << tab->index))))
|
||||||
key_read=1;
|
key_read=1;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user