RANGE Partitioning table with a great many rows, this can be much more efficient than running a  DELETE  query such as DELETE FROM employees WHERE YEAR(separated) <= 1990; . A variant on this type of partitioning is  RANGE COLUMNS  partitioning. Partitioning by  RANGE COLUMNS makes it possible to employ multiple columns for defining partitioning ranges that apply both to placement of rows in partitions and for determining the inclusion or exclusion of specific partitions when performing partition pruning. See Section 24.2.3.1, “RANGE COLUMNS partitioning” , for more information. Partitioning schemes based on time intervals.   If you wish to implement a partitioning scheme based on ranges or intervals of time in MySQL 8.0, you have two options: In MySQL 8.0, it is also possible to partition a table by  RANGE  based on the value of a  TIMESTAMP column, using the  UNIX_TIMESTAMP()  function, as shown in this example: In MySQL 8.0, any other expressions involving  TIMESTAMP  values are not permitted. (See Bug #42849.) 4664 CREATE TABLE quarterly_report_status ( report_id INT NOT NULL, report_status VARCHAR(20) NOT NULL, report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) ( PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP(’2008-01-01 00:00:00’) ), PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP(’2008-04-01 00:00:00’) ), PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP(’2008-07-01 00:00:00’) ), PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP(’2008-10-01 00:00:00’) ), PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP(’2009-01-01 00:00:00’) ), PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP(’2009-04-01 00:00:00’) ), PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP(’2009-07-01 00:00:00’) ), PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP(’2009-10-01 00:00:00’) ), PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP(’2010-01-01 00:00:00’) ), PARTITION p9 VALUES LESS THAN (MAXVALUE) ); CREATE TABLE members ( firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL ) PARTITION BY RANGE( YEAR(joined) ) ( PARTITION p0 VALUES LESS THAN (1960), PARTITION p1 VALUES LESS THAN (1970), PARTITION p2 VALUES LESS THAN (1980), PARTITION p3 VALUES LESS THAN (1990), PARTITION p4 VALUES LESS THAN MAXVALUE ); 1. Partition the table by  RANGE , and for the partitioning expression, employ a function operating on a DATE ,  TIME , or  DATETIME  column and returning an integer value, as shown here: •You frequently run queries that depend directly on the column used for partitioning the table. For example, when executing a query such as  EXPLAIN SELECT COUNT(*) FROM employees WHERE separated BETWEEN ’2000-01-01’ AND ’2000-12-31’ GROUP BY store_id; , MySQL can quickly determine that only partition  p2  needs to be scanned because the remaining partitions cannot contain any records satisfying the  WHERE  clause. See Section 24.4, “Partition Pruning” , for more information about how this is accomplished. •You want to use a column containing date or time values, or containing values arising from some other series.