DROP TABLE test_table; CREATE TABLE test_table ( id int(11) NOT NULL AUTO_INCREMENT, bool_field bool NOT NULL DEFAULT false, KEY (`id`) ) PARTITION BY LIST(bool_field) ( PARTITION field_true VALUES IN (true), PARTITION field_false VALUES IN (false) ); DROP PROCEDURE FILL_TABLE; DELIMITER $$ CREATE PROCEDURE FILL_TABLE() BEGIN DECLARE A INT; SET A=1; bucle: LOOP IF A > 5000 THEN LEAVE bucle; END IF; SET A = A + 1; INSERT INTO test_table VALUES (null,FLOOR(RAND()+.5)); END LOOP bucle; END$$ DELIMITER ; CALL FILL_TABLE; EXPLAIN PARTITIONS SELECT id,bool_field FROM test_table WHERE bool_field IS FALSE; EXPLAIN PARTITIONS SELECT id,bool_field FROM test_table WHERE bool_field = 0;