CREATE TABLE `t1` (
`id` INT NOT NULL AUTO_INCREMENT,
`totalhits` INT DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO t1 SELECT NULL, 0;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
EXPLAIN SELECT * FROM t1 WHERE id IN (1,2);
EXPLAIN SELECT * FROM t1 WHERE id IN ('1','2');
EXPLAIN SELECT * FROM t1 WHERE id IN (1,'2');
last explain shows a full table scan while the other two are using in index as expected
How to reproduce
DROP TABLE IF EXISTS t1;
CREATE TABLE `t1` (
`id` INT NOT NULL AUTO_INCREMENT,
`totalhits` INT DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO t1 SELECT NULL, 0;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
INSERT INTO t1 SELECT NULL, 0 FROM t1;
EXPLAIN SELECT * FROM t1 WHERE id IN (1,2);
EXPLAIN SELECT * FROM t1 WHERE id IN ('1','2');
EXPLAIN SELECT * FROM t1 WHERE id IN (1,'2');
last explain shows a full table scan while the other two are using in index as expected