mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-24 07:13:33 +03:00 
			
		
		
		
	This is a followup to vasil.dimov@oracle.com-20100816142329-yimenbuktd416z1a which improved the sampling algorithm.
		
			
				
	
	
		
			188 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| SET SESSION STORAGE_ENGINE = InnoDB;
 | |
| drop table if exists t1, t2, t3,t4;
 | |
| create table t1 (
 | |
| pk1 int not NULL,
 | |
| key1 int(11),
 | |
| key2 int(11),
 | |
| PRIMARY KEY  (pk1),
 | |
| KEY key1 (key1),
 | |
| KEY key2 (key2)
 | |
| );
 | |
| insert into t1 values (-5, 1, 1),
 | |
| (-100, 1, 1),
 | |
| (3, 1, 1),
 | |
| (0, 1, 1),
 | |
| (10, 1, 1);
 | |
| explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,5	NULL	5	Using sort_union(key1,key2); Using where
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	key1	key2
 | |
| -100	1	1
 | |
| -5	1	1
 | |
| 0	1	1
 | |
| 3	1	1
 | |
| 10	1	1
 | |
| drop table t1;
 | |
| create table t1 (
 | |
| pk1 int unsigned not NULL,
 | |
| key1 int(11),
 | |
| key2 int(11),
 | |
| PRIMARY KEY  (pk1),
 | |
| KEY key1 (key1),
 | |
| KEY key2 (key2)
 | |
| );
 | |
| insert into t1 values (0, 1, 1),
 | |
| (0xFFFFFFFF, 1, 1),
 | |
| (0xFFFFFFFE, 1, 1),
 | |
| (1, 1, 1),
 | |
| (2, 1, 1);
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	key1	key2
 | |
| 0	1	1
 | |
| 1	1	1
 | |
| 2	1	1
 | |
| 4294967294	1	1
 | |
| 4294967295	1	1
 | |
| drop table t1;
 | |
| create table t1 (
 | |
| pk1 char(4) not NULL,
 | |
| key1 int(11),
 | |
| key2 int(11),
 | |
| PRIMARY KEY  (pk1),
 | |
| KEY key1 (key1),
 | |
| KEY key2 (key2)
 | |
| ) collate latin2_general_ci;
 | |
| insert into t1 values ('a1', 1, 1),
 | |
| ('b2', 1, 1),
 | |
| ('A3', 1, 1),
 | |
| ('B4', 1, 1);
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	key1	key2
 | |
| a1	1	1
 | |
| A3	1	1
 | |
| b2	1	1
 | |
| B4	1	1
 | |
| drop table t1;
 | |
| create table t1 (
 | |
| pk1 int not NULL,
 | |
| pk2 char(4) not NULL collate latin1_german1_ci,
 | |
| pk3 char(4) not NULL collate latin1_bin,
 | |
| key1 int(11),
 | |
| key2 int(11),
 | |
| PRIMARY KEY  (pk1,pk2,pk3),
 | |
| KEY key1 (key1),
 | |
| KEY key2 (key2)
 | |
| );
 | |
| insert into t1 values
 | |
| (1, 'u', 'u',        1, 1),
 | |
| (1, 'u', char(0xEC), 1, 1),
 | |
| (1, 'u', 'x',        1, 1);
 | |
| insert ignore into t1 select pk1, char(0xEC), pk3, key1, key2  from t1;
 | |
| insert ignore into t1 select pk1, 'x', pk3, key1, key2  from t1 where pk2='u';
 | |
| insert ignore into t1 select 2, pk2, pk3, key1, key2  from t1;
 | |
| select * from t1;
 | |
| pk1	pk2	pk3	key1	key2
 | |
| 1	ì	u	1	1
 | |
| 1	ì	x	1	1
 | |
| 1	ì	ì	1	1
 | |
| 1	u	u	1	1
 | |
| 1	u	x	1	1
 | |
| 1	u	ì	1	1
 | |
| 1	x	u	1	1
 | |
| 1	x	x	1	1
 | |
| 1	x	ì	1	1
 | |
| 2	ì	u	1	1
 | |
| 2	ì	x	1	1
 | |
| 2	ì	ì	1	1
 | |
| 2	u	u	1	1
 | |
| 2	u	x	1	1
 | |
| 2	u	ì	1	1
 | |
| 2	x	u	1	1
 | |
| 2	x	x	1	1
 | |
| 2	x	ì	1	1
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	pk2	pk3	key1	key2
 | |
| 1	ì	u	1	1
 | |
| 1	ì	x	1	1
 | |
| 1	ì	ì	1	1
 | |
| 1	u	u	1	1
 | |
| 1	u	x	1	1
 | |
| 1	u	ì	1	1
 | |
| 1	x	u	1	1
 | |
| 1	x	x	1	1
 | |
| 1	x	ì	1	1
 | |
| 2	ì	u	1	1
 | |
| 2	ì	x	1	1
 | |
| 2	ì	ì	1	1
 | |
| 2	u	u	1	1
 | |
| 2	u	x	1	1
 | |
| 2	u	ì	1	1
 | |
| 2	x	u	1	1
 | |
| 2	x	x	1	1
 | |
| 2	x	ì	1	1
 | |
| alter table t1 drop primary key;
 | |
| select * from t1;
 | |
| pk1	pk2	pk3	key1	key2
 | |
| 1	ì	u	1	1
 | |
| 1	ì	x	1	1
 | |
| 1	ì	ì	1	1
 | |
| 1	u	u	1	1
 | |
| 1	u	x	1	1
 | |
| 1	u	ì	1	1
 | |
| 1	x	u	1	1
 | |
| 1	x	x	1	1
 | |
| 1	x	ì	1	1
 | |
| 2	ì	u	1	1
 | |
| 2	ì	x	1	1
 | |
| 2	ì	ì	1	1
 | |
| 2	u	u	1	1
 | |
| 2	u	x	1	1
 | |
| 2	u	ì	1	1
 | |
| 2	x	u	1	1
 | |
| 2	x	x	1	1
 | |
| 2	x	ì	1	1
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	pk2	pk3	key1	key2
 | |
| 1	ì	u	1	1
 | |
| 1	ì	x	1	1
 | |
| 1	ì	ì	1	1
 | |
| 1	u	u	1	1
 | |
| 1	u	x	1	1
 | |
| 1	u	ì	1	1
 | |
| 1	x	u	1	1
 | |
| 1	x	x	1	1
 | |
| 1	x	ì	1	1
 | |
| 2	ì	u	1	1
 | |
| 2	ì	x	1	1
 | |
| 2	ì	ì	1	1
 | |
| 2	u	u	1	1
 | |
| 2	u	x	1	1
 | |
| 2	u	ì	1	1
 | |
| 2	x	u	1	1
 | |
| 2	x	x	1	1
 | |
| 2	x	ì	1	1
 | |
| drop table t1;
 | |
| create table t1  (
 | |
| pk1 varchar(8) NOT NULL default '',
 | |
| pk2 varchar(4) NOT NULL default '',
 | |
| key1 int(11),
 | |
| key2 int(11),
 | |
| primary key(pk1, pk2),
 | |
| KEY key1 (key1),
 | |
| KEY key2 (key2)
 | |
| );
 | |
| insert into t1 values ('','empt',2,2),
 | |
| ('a','a--a',2,2),
 | |
| ('bb','b--b',2,2),
 | |
| ('ccc','c--c',2,2),
 | |
| ('dddd','d--d',2,2);
 | |
| select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
 | |
| pk1	pk2	key1	key2
 | |
| 	empt	2	2
 | |
| a	a--a	2	2
 | |
| bb	b--b	2	2
 | |
| ccc	c--c	2	2
 | |
| dddd	d--d	2	2
 | |
| drop table t1;
 |