【发布时间】:2020-12-03 01:16:48
【问题描述】:
如果我有一个按年份分区的表;当我必须通过其 ID 查找行并且无法在查找查询中使用分区修剪时,如何避免扫描所有分区?
CREATE TABLE part_table (
id bigint NOT NULL auto_increment,
moment datetime NOT NULL,
KEY (id),
KEY (moment)
)-- partitioning information (in years)
PARTITION BY RANGE( YEAR(moment) ) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026),
PARTITION pFuture VALUES LESS THAN (maxvalue) )
;
例如查询查询:
SELECT * FROM part_table WHERE ID = <nr>
【问题讨论】:
-
试试
PRIMARY KEY(id, moment)? -
@Barmar;使用该主键不会导致扫描不同的分区集 - 当使用 EXPLAIN SELECT * FROM part_table WHERE id = 1 时,两种情况下都会显示相同的所有分区集。
标签: mysql partitioning pruning