CREATE TABLE t1 ( a INT, b INT, KEY ( a, b ) ) PARTITION BY HASH (a) PARTITIONS 1; CREATE TABLE t2 ( a INT, b INT, KEY a (a,b) ); INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5); INSERT INTO t1 SELECT a + 5, b + 5 FROM t1; INSERT INTO t1 SELECT a + 10, b + 10 FROM t1; INSERT INTO t1 SELECT a + 20, b + 20 FROM t1; INSERT INTO t1 SELECT a + 40, b + 40 FROM t1; INSERT INTO t2 SELECT * FROM t1; --echo # plans should be identical EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a; EXPLAIN SELECT a, MAX(b) FROM t2 WHERE a IN (10,100) GROUP BY a; SELECT variable_value INTO @handler_read_key1 FROM information_schema.global_status WHERE variable_name = 'handler_read_key'; SELECT a, MAX(b) FROM t1 WHERE a IN (10, 100) GROUP BY a; SELECT variable_value INTO @handler_read_key2 FROM information_schema.global_status WHERE variable_name = 'handler_read_key'; --echo # Should be no more than 4 reads. SELECT @handler_read_key2 - @handler_read_key1; SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a; SELECT variable_value INTO @handler_read_key3 FROM information_schema.global_status WHERE variable_name = 'handler_read_key'; SELECT @handler_read_key3 - @handler_read_key2; DROP TABLE t1, t2;