Commit afac3c31 authored by unknown's avatar unknown

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.


sql/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.
mysql-test/t/select.test:
  Added a test case for bug #5333.
mysql-test/r/key_primary.result:
  Made covering index usable for const tables.
mysql-test/r/null_key.result:
  Made covering index usable for const tables.
mysql-test/r/select.result:
  Added a test case for bug #5333.
parent c1fd20bb
...@@ -13,7 +13,7 @@ t1 ...@@ -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 ...@@ -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; ...@@ -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'; ...@@ -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;
\ No newline at end of file
...@@ -4901,6 +4901,15 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos) ...@@ -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, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment