将分区添加到mysql中的现有表会产生错误的结果

问题描述

我已经在MysqL中用以下详细信息创建了employee表。

CREATE TABLE employee (
  id INT,username varchar(50),store_id INT,name VARCHAR(20)
);

-> insert into employee values(1,"ajay@gmail.com",79,"Ajay verma");
-> insert into employee values(2,"rahul@gmail.com",85,"rahul shaikh");
->insert into employee values(3,"vikas@gmail.com",302,"vikas malhotra");

现在我将范围分区添加到具有上述记录的现有雇员表上方。

Alter table employee
PARTITION BY range columns(store_id)(
PARTITION p0 VALUES less than (100),PARTITION p1 VALUES less than (200),PARTITION p2 VALUES less than (300),PARTITION p3 VALUES less than (400)
);

现在我正在期待,因为范围分区位于store_id上​​,所以对于store_id 79和85我将在分区p0中有2条记录,对于具有store_id 302的记录我将在p3分区中有1条记录。

但是当我在查询下面触发时,我会看到不同的结果

 SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME,TABLE_ROWS,PARTITION_ORDINAL_POSITION,PARTITION_METHOD,PARTITION_EXPRESSION
 FROM informatION_SCHEMA.PARTITIONS WHERE TABLE_NAME='employee';

o / p:-

enter image description here

在上面的输出中,我只能看到分区p0的2条记录,但没有分区p3的记录,但是应该总共有3条记录。 分区p0有2条记录,分区p3有1条记录。 为什么上面对“ informatION_SCHEMA.PARTITIONS”的查询给出了错误的结果?

解决方法

information_schema.partitions表上的mysql文档所述,

TABLE_ROWS

分区中表的行数。

对于分区的InnoDB表,在TABLE_ROWS中给出的行数 列仅是SQL优化中使用的估计值,并且可能 并非总是准确的。

因此,在您的情况下,估计是不正确的。