Mysql select 按日期分区时自动递增主键

Mysql select by auto increment primary key while partitioned by date

我想知道如果我按 日期 对 table 进行分区,然后有一些 [=27=,mysql 会如何操作]update 查询 primary key ?

它会搜索所有分区还是查询优化器知道该行保存在哪个分区中?

其他唯一和非唯一索引列呢?

背景

PARTITIONed table 视为实际上独立的 table 的集合,每个都有自己的数据 BTree 和索引 BTree。

所有 UNIQUE 键,包括 PRIMARY KEY 必须包含“分区键”。

如果分区键在查询中可用,查询将首先尝试进行“分区修剪”以限制实际查看的分区数。如果没有该信息,它必须查看所有分区。

“修剪”后,处理会转到每个可能的分区,并执行查询。

Select,更新

A SELECT 逻辑上对在 non-pruned 分区中找到的任何内容执行 UNION ALL

UPDATE 将其操作应用于每个 non-pruned 分区。什么都不做的更新不会造成任何伤害(性能除外)。

意见

根据我的经验,PARTITIONing 经常会因为上述原因而减慢速度。分区有少量用例:http://mysql.rjweb.org/doc.php/partitionmaint

您的具体问题

partition a table by date and then have some select or update queries by primary key ?

将触及所有分区。 SELECT 将一个结果与 N-1 个空结果组合在一起。 UPDATE 将进行一次更新,加上 N-1 次无用的更新尝试。

一个AUTO_INCREMENT列必须是一些索引中的第一列(不一定是PK,不一定是单独的)。因此,在每个分区 中使用id 是非常有效的。但这意味着它是 non-partitioned table 中 N 倍的努力。 (这是分区的性能拖动。)