Mysql按日期分区自动递增主键选择

Mysql按日期分区自动递增主键选择,mysql,query-optimization,database-partitioning,Mysql,Query Optimization,Database Partitioning,我想知道如果我按日期划分一个表,然后按主键进行一些select或update查询,mysql将如何工作 它是要搜索所有分区还是查询优化器知道行保存在哪个分区 其他唯一和非唯一的索引列呢?背景 将分区的表看作是一组实际上独立的表,每个表都有自己的数据树和索引树 所有唯一键,包括主键都必须包含“分区键” 如果分区键在查询中可用,查询将首先尝试执行“分区修剪”,以限制实际查看的分区数。如果没有这些信息,它必须查看所有分区 在“修剪”之后,处理转到每个可能的分区,并执行查询 选择、更新 SELECT逻辑

我想知道如果我按日期划分一个表,然后按主键进行一些select或update查询,mysql将如何工作

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


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

背景

将分区的表看作是一组实际上独立的表,每个表都有自己的数据树和索引树

所有
唯一
键,包括
主键
都必须包含“分区键”

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

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

选择、更新

SELECT
逻辑上对未修剪分区中找到的任何内容执行
UNION ALL

更新将其操作应用于每个未修剪的分区。不做任何事情的更新不会造成任何伤害(性能除外)

意见

根据我的经验,
分区
通常会由于上述情况而减慢速度。有少量用于分区的用例:

您的具体问题

是否按日期对表进行分区,然后按主键进行一些select或update查询

所有分区都将被触摸。
选择
将一个结果与N-1个空结果组合在一起。
UPDATE
将执行一次更新,再加上N-1次无用的更新尝试

AUTO_INCREMENT
列必须是某些索引中的第一列(不一定是主键,也不一定是单独的)。因此,在每个分区中使用id是非常有效的。但这意味着它的工作量是非分区表的N倍。(这是分区的性能阻力。)