1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Added thread variable max_seeks_for_key

Change optimizer to prefer key lookups before table scan
Change table scans to be done after tables with constrains on scanned table 


mysql-test/r/distinct.result:
  Update results
mysql-test/r/group_by.result:
  Update results
mysql-test/r/heap.result:
  Update results
mysql-test/r/join.result:
  Update results
mysql-test/r/key_diff.result:
  Update results
mysql-test/r/myisam.result:
  Update results
mysql-test/r/order_by.result:
  Update results
mysql-test/r/select_safe.result:
  Update results
mysql-test/t/distinct.test:
  Change test to be repeatable
mysql-test/t/join.test:
  Change test to be repeatable
mysql-test/t/select_safe.test:
  Add tests for MAX_SEEKS_FOR_KEY
sql/handler.h:
  Optimize structure for 64 bit machines (and to avoid problems with gdb)
sql/item_cmpfunc.cc:
  Initialize not_null_tables_cache properly
sql/mysqld.cc:
  Added max_seeks_for_key
sql/set_var.cc:
  Added max_seeks_for_key
sql/sql_class.h:
  Added max_seeks_for_key
sql/sql_select.cc:
  Added max_seeks_for_key
  Change optimizer to prefer key lookups before table scan.
  Change table scans to be done after tables with constrains on scanned table
This commit is contained in:
unknown
2003-06-27 03:04:54 +03:00
parent 7539980eb1
commit c2cb9b97be
17 changed files with 114 additions and 65 deletions

View File

@ -1,6 +1,6 @@
drop table if exists t1;
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9;
create table t1 (a int auto_increment primary key, b char(20));
create table t1 (a int auto_increment primary key, b char(20), key(b));
insert into t1 values(1,"test");
SELECT SQL_BUFFER_RESULT * from t1;
a b
@ -13,7 +13,7 @@ a b
1 test
2 test2
update t1 set b="a" where a=1;
select 1 from t1,t1 as t2,t1 as t3,t1 as t4;
select 1 from t1,t1 as t2,t1 as t3;
1
1
1
@ -22,11 +22,9 @@ select 1 from t1,t1 as t2,t1 as t3,t1 as t4;
update t1 set b="a";
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
update t1 set b="a" where b="test";
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
delete from t1;
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
delete from t1 where b="test";
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
delete from t1 where a+0=1;
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
select 1 from t1,t1 as t2,t1 as t3,t1 as t4,t1 as t5;
@ -59,5 +57,22 @@ a b
2 test2
4 a
5 a
SELECT @@MAX_SEEKS_FOR_KEY;
@@max_seeks_for_key
4294967295
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a");
explain select * from t1,t1 as t2 where t1.b=t2.b;
table type possible_keys key key_len ref rows Extra
t1 ALL b NULL NULL NULL 21
t2 ALL b NULL NULL NULL 16 Using where
set MAX_SEEKS_FOR_KEY=1;
explain select * from t1,t1 as t2 where t1.b=t2.b;
table type possible_keys key key_len ref rows Extra
t1 ALL b NULL NULL NULL 21
t2 ref b b 21 t1.b 6 Using where
SET MAX_SEEKS_FOR_KEY=DEFAULT;
drop table t1;
SET SQL_SAFE_UPDATES=0,SQL_SELECT_LIMIT=DEFAULT, SQL_MAX_JOIN_SIZE=DEFAULT;