mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	- added join cache indication in EXPLAIN (Extra column). - prefer filesort over full scan over index for ORDER BY (because it's faster). - when switching from REF to RANGE because RANGE uses longer key turn off sort on the head table only as the resulting RANGE access is a candidate for join cache and we don't want to disable it by sorting on the first table only.
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
create table t1 (USR_ID integer not null, MAX_REQ integer not null, constraint PK_SEA_USER primary key (USR_ID)) engine=InnoDB;
 | 
						|
insert into t1 values (1, 3);
 | 
						|
select count(*) + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ from t1 group by MAX_REQ;
 | 
						|
count(*) + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ
 | 
						|
1
 | 
						|
select Case When Count(*) < MAX_REQ Then 1 Else 0 End from t1 where t1.USR_ID = 1 group by MAX_REQ;
 | 
						|
Case When Count(*) < MAX_REQ Then 1 Else 0 End
 | 
						|
1
 | 
						|
drop table t1;
 | 
						|
create table t1m (a int) engine=myisam;
 | 
						|
create table t1i (a int) engine=innodb;
 | 
						|
create table t2m (a int) engine=myisam;
 | 
						|
create table t2i (a int) engine=innodb;
 | 
						|
insert into t2m values (5);
 | 
						|
insert into t2i values (5);
 | 
						|
select min(a) from t1m;
 | 
						|
min(a)
 | 
						|
NULL
 | 
						|
select min(7) from t1m;
 | 
						|
min(7)
 | 
						|
NULL
 | 
						|
select min(7) from DUAL;
 | 
						|
min(7)
 | 
						|
7
 | 
						|
explain select min(7) from t2m join t1m;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | 
						|
select min(7) from t2m join t1m;
 | 
						|
min(7)
 | 
						|
NULL
 | 
						|
select max(a) from t1m;
 | 
						|
max(a)
 | 
						|
NULL
 | 
						|
select max(7) from t1m;
 | 
						|
max(7)
 | 
						|
NULL
 | 
						|
select max(7) from DUAL;
 | 
						|
max(7)
 | 
						|
7
 | 
						|
explain select max(7) from t2m join t1m;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 | 
						|
select max(7) from t2m join t1m;
 | 
						|
max(7)
 | 
						|
NULL
 | 
						|
select 1, min(a) from t1m where a=99;
 | 
						|
1	min(a)
 | 
						|
1	NULL
 | 
						|
select 1, min(a) from t1m where 1=99;
 | 
						|
1	min(a)
 | 
						|
1	NULL
 | 
						|
select 1, min(1) from t1m where a=99;
 | 
						|
1	min(1)
 | 
						|
1	NULL
 | 
						|
select 1, min(1) from t1m where 1=99;
 | 
						|
1	min(1)
 | 
						|
1	NULL
 | 
						|
select 1, max(a) from t1m where a=99;
 | 
						|
1	max(a)
 | 
						|
1	NULL
 | 
						|
select 1, max(a) from t1m where 1=99;
 | 
						|
1	max(a)
 | 
						|
1	NULL
 | 
						|
select 1, max(1) from t1m where a=99;
 | 
						|
1	max(1)
 | 
						|
1	NULL
 | 
						|
select 1, max(1) from t1m where 1=99;
 | 
						|
1	max(1)
 | 
						|
1	NULL
 | 
						|
select min(a) from t1i;
 | 
						|
min(a)
 | 
						|
NULL
 | 
						|
select min(7) from t1i;
 | 
						|
min(7)
 | 
						|
NULL
 | 
						|
select min(7) from DUAL;
 | 
						|
min(7)
 | 
						|
7
 | 
						|
explain select min(7) from t2i join t1i;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t2i	ALL	NULL	NULL	NULL	NULL	1	Using join cache
 | 
						|
1	SIMPLE	t1i	ALL	NULL	NULL	NULL	NULL	1	
 | 
						|
select min(7) from t2i join t1i;
 | 
						|
min(7)
 | 
						|
NULL
 | 
						|
select max(a) from t1i;
 | 
						|
max(a)
 | 
						|
NULL
 | 
						|
select max(7) from t1i;
 | 
						|
max(7)
 | 
						|
NULL
 | 
						|
select max(7) from DUAL;
 | 
						|
max(7)
 | 
						|
7
 | 
						|
explain select max(7) from t2i join t1i;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t2i	ALL	NULL	NULL	NULL	NULL	1	Using join cache
 | 
						|
1	SIMPLE	t1i	ALL	NULL	NULL	NULL	NULL	1	
 | 
						|
select max(7) from t2i join t1i;
 | 
						|
max(7)
 | 
						|
NULL
 | 
						|
select 1, min(a) from t1i where a=99;
 | 
						|
1	min(a)
 | 
						|
1	NULL
 | 
						|
select 1, min(a) from t1i where 1=99;
 | 
						|
1	min(a)
 | 
						|
1	NULL
 | 
						|
select 1, min(1) from t1i where a=99;
 | 
						|
1	min(1)
 | 
						|
1	NULL
 | 
						|
select 1, min(1) from t1i where 1=99;
 | 
						|
1	min(1)
 | 
						|
1	NULL
 | 
						|
select 1, max(a) from t1i where a=99;
 | 
						|
1	max(a)
 | 
						|
1	NULL
 | 
						|
select 1, max(a) from t1i where 1=99;
 | 
						|
1	max(a)
 | 
						|
1	NULL
 | 
						|
select 1, max(1) from t1i where a=99;
 | 
						|
1	max(1)
 | 
						|
1	NULL
 | 
						|
select 1, max(1) from t1i where 1=99;
 | 
						|
1	max(1)
 | 
						|
1	NULL
 | 
						|
explain select count(*), min(7), max(7) from t1m, t1i;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t1m	system	NULL	NULL	NULL	NULL	0	const row not found
 | 
						|
1	SIMPLE	t1i	ALL	NULL	NULL	NULL	NULL	1	
 | 
						|
select count(*), min(7), max(7) from t1m, t1i;
 | 
						|
count(*)	min(7)	max(7)
 | 
						|
0	NULL	NULL
 | 
						|
explain select count(*), min(7), max(7) from t1m, t2i;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t1m	system	NULL	NULL	NULL	NULL	0	const row not found
 | 
						|
1	SIMPLE	t2i	ALL	NULL	NULL	NULL	NULL	1	
 | 
						|
select count(*), min(7), max(7) from t1m, t2i;
 | 
						|
count(*)	min(7)	max(7)
 | 
						|
0	NULL	NULL
 | 
						|
explain select count(*), min(7), max(7) from t2m, t1i;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t2m	system	NULL	NULL	NULL	NULL	1	
 | 
						|
1	SIMPLE	t1i	ALL	NULL	NULL	NULL	NULL	1	
 | 
						|
select count(*), min(7), max(7) from t2m, t1i;
 | 
						|
count(*)	min(7)	max(7)
 | 
						|
0	NULL	NULL
 | 
						|
drop table t1m, t1i, t2m, t2i;
 |