10w
级别, 所以不按日分区, 用月份进行分区id
和分区键建立成联合主键`id` BIGINT UNSIGNED NOT NULL auto_increment,
PRIMARY KEY(`id`, `date_key`)
2021-09-01
小的分到p_202108
分区2021-10-01
小于20210901
分到p_202109
分区CREATE TABLE `video_play_logs` (
`video_id` INT UNSIGNED NOT NULL,
`date_key` date NOT NULL,
index `video_play_logs_video_id_index` ( `video_id` )
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
PARTITION BY RANGE(to_days(`date_key`)) (
PARTITION p_202108 VALUES LESS THAN (to_days('20210901')),
PARTITION p_202109 VALUES LESS THAN (to_days('20211001')),
PARTITION p_202110 VALUES LESS THAN (to_days('20211101')),
PARTITION p_202111 VALUES LESS THAN (to_days('20211201')),
PARTITION p_202112 VALUES LESS THAN (to_days('20220101'))
)
TABLE_ROWS
查看分区里的数据条数SELECT
TABLE_NAME,
PARTITION_NAME,
TABLE_ROWS
FROM
information_schema.`PARTITIONS`
WHERE
table_name='video_play_logs'
ORDER BY TABLE_ROWS desc
+-----------------+----------------+------------+
| TABLE_NAME | PARTITION_NAME | TABLE_ROWS |
+-----------------+----------------+------------+
| video_play_logs | p_202108 | 0 |
| video_play_logs | p_202109 | 0 |
| video_play_logs | p_202110 | 0 |
| video_play_logs | p_202111 | 0 |
| video_play_logs | p_202112 | 0 |
| video_play_logs | p_202201 | 0 |
| video_play_logs | p_202202 | 0 |
| video_play_logs | p_202203 | 0 |
| video_play_logs | p_202204 | 0 |
......
partitions
包含数据,则代表查询已经命中分区EXPLAIN PARTITIONS SELECT * FROM video_play_logs where date_key='2021-08-27';
+----+-------------+-----------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | video_play_logs | p_202109 | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |
+----+-------------+-----------------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set (0.16 sec)