在MySQL中使用范围分区获得意外结果

时间:2014-11-11 05:30:37

标签: mysql partitioning database-partitioning

我正在尝试使用Range在2014年的所有日子进行分区

PARTITION BY RANGE(UNIX_TIMESTAMP(gps_time)) (
PARTITION p01 VALUES LESS THAN (UNIX_TIMESTAMP('2014-01-01 00:00:00')),
. . . PARTITION p365 VALUES LESS THAN (UNIX_TIMESTAMP('2015-01-01 00:00:00')));

如果我插入几个较小的行它按预期分区。坐在特定的分区,这很好。

但是当我尝试一次插入数千行时,例如应该在2014-07-07 00:00:00放置在最后一个分区的值,即p365。

我遇到的另一个问题是......当我在分区中插入值

后再次输入以下查询时
      SELECT partition_name, table_rows 
      FROM information_schema.partitions
      WHERE table_name = 'vehicle_gps';

每个分区中的行数更改

为什么???请帮我解决这些问题

谢谢你:)

1 个答案:

答案 0 :(得分:0)

InnoDB行计数是近似值。这可能解释了"每个分区中的行数变化"。将数字视为(通常)在精确行数的2倍之内。

出于性能原因,表格中没有超过50个分区。

至于为什么批量插入存储在错误的分区中,我希望看到更多'证明'。也许某些例子会出现一些模式。