You can further divide each partition into a partitioned table. This is called subpartitioning or composite partitioning:
mysql> CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` enum('M','F') NOT NULL, `hire_date` date NOT NULL, `address` varchar(100) DEFAULT NULL, PRIMARY KEY (`emp_no`,`hire_date`), KEY `name` (`first_name`,`last_name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4PARTITION BY RANGE( YEAR(hire_date) ) SUBPARTITION BY HASH(emp_no) SUBPARTITIONS 4 ( PARTITION p0 VALUES LESS THAN (1990), PARTITION p1 VALUES LESS THAN (2000), PARTITION p2 VALUES LESS THAN (2010), PARTITION p3 VALUES LESS THAN (2020), PARTITION ...