127 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
--disable_query_log
 | 
						|
set @@session.explicit_defaults_for_timestamp=off;
 | 
						|
--enable_query_log
 | 
						|
#owner: bin.lb
 | 
						|
#owner group: sql1
 | 
						|
#tags: optimizer
 | 
						|
#description:
 | 
						|
 | 
						|
##
 | 
						|
# test index union
 | 
						|
##
 | 
						|
--disable_query_log
 | 
						|
--disable_abort_on_error
 | 
						|
--disable_warnings
 | 
						|
--source mysql_test/include/index_quick_major.inc
 | 
						|
--real_sleep 1
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1,t2;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
create table t1 (pk1 int,pk2 varchar(124),pk3  timestamp(6) default "2012-01-01 12:00:00", c1 int,c2 varchar(1024),c3  timestamp(6) default "2012-01-01 12:00:00",c4 int,c5 int,c6 int,primary key(pk1,pk2,pk3));
 | 
						|
--disable_query_log
 | 
						|
create index i1 on t1(c1);
 | 
						|
create index i2 on t1(c1,c2);
 | 
						|
create index i3 on t1(c1,c2,c3);
 | 
						|
create index i4 on t1(c4,c5,c6);
 | 
						|
 | 
						|
create table t2 (pk1 int primary key, c1 int not null,c2 varchar(1024) not null,c3  timestamp(6) default "2012-01-01 12:00:00",c4 int,c5 int,c6 int);
 | 
						|
--disable_query_log
 | 
						|
create index i11 on t2(c1) storing(c2);
 | 
						|
create index i12 on t2(c4,c5) storing(c3);
 | 
						|
 | 
						|
--source mysql_test/include/check_all_idx_ok.inc
 | 
						|
 | 
						|
--disable_query_log
 | 
						|
insert into t1 values
 | 
						|
(1, 'primarykey1', '2013-12-11 01:01:01',44,'column11','2013-12-11 11:11:11',4,2,3),
 | 
						|
(2, 'primarykey2', '2013-12-11 01:01:02',33,'column21','2013-12-11 11:11:12',3,1,3),
 | 
						|
(3, 'primarykey3', '2013-12-11 01:01:03',22,'column32','2013-12-11 11:11:13',2,1,2),
 | 
						|
(4, 'primarykey4', '2013-12-11 01:01:04',11,'column42','2013-12-11 11:11:14',1,3,2);
 | 
						|
 | 
						|
insert into t2 values
 | 
						|
(1,44,'column11','2013-12-11 11:11:11',4,2,3),
 | 
						|
(2,10,'column21','2013-12-11 11:11:12',3,1,2),
 | 
						|
(3,22,'column32','2013-12-11 11:11:13',2,0,1),
 | 
						|
(4,11,'column43','2013-12-11 11:11:14',1,-1,0),
 | 
						|
(5,33,'column54','2013-12-11 11:11:15',0,-2,-1),
 | 
						|
(6,33,'column65','2013-12-11 11:11:16',3,0,3);
 | 
						|
 | 
						|
--enable_query_log
 | 
						|
 | 
						|
##############one table union #############
 | 
						|
#all use index 
 | 
						|
--sorted_result
 | 
						|
(select /*+index(t1 i1) */ pk1,c1 from t1 where c1<30 order by c1) union all (select /*+index(t1 i1) */ pk1,c1 from t1 where c1 > 10 order by c1); 
 | 
						|
select * from ((select /*+index(t1 i1) */ pk1,c1 from t1 where c1<30 order by c1) union all (select /*+index(t1 i1) */ pk1,c1 from t2 where c1 > 10 order by c1) ) a order by pk1, a.c1; 
 | 
						|
--sorted_result
 | 
						|
(select /*+index(t1 i1) */ pk1,c1 from t1 where c1<30 order by c1) union  (select /*+index(t1 i1) */ pk1,c1 from t1 where c1 > 10 order by c1); 
 | 
						|
--sorted_result
 | 
						|
(select /*+index(t1 i1) */ pk1,c1 from t1 where c1<30 order by c1) except (select /*+index(t1 i1) */ pk1,c1 from t1 where c1 > 10 order by c1); 
 | 
						|
--sorted_result
 | 
						|
(select /*+index(t1 i1) */ pk1,c1 from t1 where c1<30 order by c1) intersect (select /*+index(t1 i1) */ pk1,c1 from t1 where c1 > 10 order by c1); 
 | 
						|
 | 
						|
--sorted_result
 | 
						|
(select c1,c2,c3 from t1 where c1=11 order by c2) union (select c1,c2,c3 from t1 where c1=22 and c2 like 'column3_' order by c1) union distinct select c1,c2,c3 from t1 where c1>22 and c2 is not null and c3>='2013-12-11 11:11:11' union all (select c1,c2,c3 from t1 where c4<2 and c5>1 and c6=3 order by c4) except  (select c1,c2,c3 from t1 where c3 <= '2013-12-11 11:11:11' order by c3);
 | 
						|
 | 
						|
--sorted_result
 | 
						|
select * from ((select * from t1 where c1=44) union (select * from t1 where c1=33 and c2 like 'column%') union all (select * from t1 where c4>2 and c5<3 and c6 != 2)) as a;
 | 
						|
--sorted_result
 | 
						|
select * from ((select * from t1 where c1=44) union all (select * from t1 where c1=33 and c2 like 'column%') except (select * from t1 where c4>2 and c5<3 and c6 != 2)) as a;
 | 
						|
--sorted_result
 | 
						|
select * from ((select * from t1 where c1=44) intersect (select * from t1 where c1=33 and c2 like 'column%') union all (select * from t1 where c4>2 and c5<3 and c6 != 2)) as a;
 | 
						|
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t1 where c1 in (33,11) order by c1) union all select c1,c4 from t1 where c1=44;
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t1 where c1 in (1,44) order by c1)  union all (select c1,c4 from t1 where c1 in (33,11) order by c1);
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t1 where c1 in (1,44) order by c1)  union all (select c1,c4 from t1 where c1 =33 order by c4);
 | 
						|
# TODO(@linsheng): BUG
 | 
						|
# (select c1,c4 from t1 where c1 in (1,44) order by c1)  union (select c1,c4 from t1 where c1 =33 order by c4);
 | 
						|
# (select c1,c4 from t1 where c1 in (1,44) order by c4)  union (select c1,c4 from t1 where c1 =33 order by c4);
 | 
						|
# (select c1,c4 from t1 where c1 in (1,44) order by c1)  except (select c1,c4 from t1 where c1 =33 order by c4);
 | 
						|
# (select c1,c4 from t1 where c1 in (1,44) order by c4)   intersect  (select c1,c4 from t1 where c1 =33 order by c4);
 | 
						|
--sorted_result
 | 
						|
select c1,c4 from t1 where c1=44 union (select c1,c4 from t1 where c1 not in (33,11) order by c1);
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t1 where c1 not in (33,11) order by c1) except select c1,c4 from t1 where c1=44;
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t1 where c1 not in (33,11) order by c1) intersect select c1,c4 from t1 where c1=44;
 | 
						|
 | 
						|
 | 
						|
(select c4,c5,c6 from t1 order by c1 limit 2)  union all (select c4,c5,c6 from t1 order by c4 limit 1) order by c4 desc;
 | 
						|
(select c4,c5,c6 from t1 order by c4 limit 2)  union (select c4,c5,c6 from t1 order by c4 limit 1) order by c4 desc;
 | 
						|
(select c4,c5,c6 from t1 order by c2 limit 2)  except (select c4,c5,c6 from t1 order by c4 limit 1) order by c4 desc;
 | 
						|
(select c4,c5,c6 from t1  order by c4 limit 2)  intersect (select c4,c5,c6 from t1 order by c4 limit 1) order by c4 desc;
 | 
						|
 | 
						|
################ multi table union #############
 | 
						|
#all use index
 | 
						|
--sorted_result
 | 
						|
select /*+index(t1 i1)*/ pk1,c1 from t1 union select /*+index(t2 i11)*/ pk1,c1 from t2;
 | 
						|
--sorted_result
 | 
						|
select /*+index(t1 i1)*/ pk1,c1 from t1 union all select /*+index(t2 i11)*/ pk1,c1 from t2;
 | 
						|
--sorted_result
 | 
						|
select /*+index(t1 i1)*/ pk1,c1 from t1 except select /*+index(t2 i11)*/ pk1,c1 from t2;
 | 
						|
--sorted_result
 | 
						|
select /*+index(t1 i1)*/ pk1,c1 from t1 intersect select /*+index(t2 i11)*/ pk1,c1 from t2;
 | 
						|
 | 
						|
--sorted_result
 | 
						|
(select t1.c1,t2.c4 from t1,t2 where t1.c1=t2.c1 order by t1.c1) union (select c1,c4 from t2 where c1=44 order by c1);
 | 
						|
--sorted_result
 | 
						|
(select c1,c4 from t2 where c1=44 order by c1) union (select t1.c1,t2.c4 from t1,t2 where t1.c1=t2.c1 order by t1.c1);
 | 
						|
--sorted_result
 | 
						|
(select t1.c1,t2.c4 from t1,t2 where t1.c1=t2.c1 order by t2.c1) union all (select c1,c4 from t2 where c1=44 order by c1);
 | 
						|
--sorted_result
 | 
						|
(select t1.c1,t2.c4 from t1,t2 where t1.c1=t2.c1 order by t1.c1) except (select c1,c4 from t2 where c1=44 order by c2);
 | 
						|
--sorted_result
 | 
						|
(select t1.c1,t2.c4 from t1,t2 where t1.c1=t2.c1 order by t2.c1) intersect (select c1,c4 from t2 where c1=44 order by c1);
 | 
						|
 | 
						|
###use two order by in from sql
 | 
						|
select * from (select * from t1 where pk1 in(1,2,3,4,5,6)) a order by pk2;
 | 
						|
select * from (select * from t1 where pk1 in(1,2,3,4,5,6) order by pk1) a order by pk2;
 | 
						|
select * from (select * from t1 where pk1 in(1,2,3,4,5,6) order by pk1) a order by pk1;
 | 
						|
select * from (select * from t1 where pk1 in(1,2,3,4,5,6) order by pk1) a  where a.c2>='abc' order by pk1;
 | 
						|
select * from (select * from t1 where pk1 in(1,2,3,4,5,6) order by pk1) a  where a.c2>='abc' order by pk2;
 | 
						|
--enable_abort_on_error
 |