mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	and auto_increment keys
Problems: 
  1. ALTER TABLE ... ORDER BY... doesn't make sence if there's a 
     user-defined clustered index in the table.
  2. using a secondary index is slower than using a clustered one 
     for a table scan.
Fixes:
  1. raise a warning.
  2. use the clustered index.
mysql-test/include/mix1.inc:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - test case.
mysql-test/r/innodb.result:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - results adjusted.
mysql-test/r/innodb_mysql.result:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - results adjusted.
mysql-test/r/join_outer_innodb.result:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - results adjusted.
sql/sql_select.cc:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - use the clustered index for a table scan (if any) as it's faster than
      using a secondary index.
sql/sql_table.cc:
  Fix for bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB 
  and auto_increment keys
    - ALTER TABLE ... ORDER BY doesn't make sence if there's a 
      user-defined clustered index in the table. Ignore it in such cases
      and raise a warning.
		
	
		
			
				
	
	
		
			20 lines
		
	
	
		
			888 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			888 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
CREATE TABLE t1 (id int(11) NOT NULL PRIMARY KEY, name varchar(20),
 | 
						|
INDEX (name)) ENGINE=InnoDB;
 | 
						|
CREATE TABLE t2 (id int(11) NOT NULL PRIMARY KEY, fkey int(11),
 | 
						|
FOREIGN KEY (fkey) REFERENCES t2(id)) ENGINE=InnoDB;
 | 
						|
INSERT INTO t1 VALUES (1,'A1'),(2,'A2'),(3,'B');
 | 
						|
INSERT INTO t2 VALUES (1,1),(2,2),(3,2),(4,3),(5,3);
 | 
						|
EXPLAIN
 | 
						|
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id 
 | 
						|
WHERE t1.name LIKE 'A%';
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t1	index	PRIMARY,name	PRIMARY	4	NULL	3	Using where
 | 
						|
1	SIMPLE	t2	ref	fkey	fkey	5	test.t1.id	1	Using where; Using index
 | 
						|
EXPLAIN
 | 
						|
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id 
 | 
						|
WHERE t1.name LIKE 'A%' OR FALSE;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 | 
						|
1	SIMPLE	t2	index	NULL	PRIMARY	4	NULL	5	
 | 
						|
1	SIMPLE	t1	eq_ref	PRIMARY	PRIMARY	4	test.t2.fkey	1	Using where
 | 
						|
DROP TABLE t1,t2;
 |