将分区添加到 mysql 中的现有 table 给出了错误的结果

Adding partition to existing table in mysql gives wrong result

我在 mysql 中创建了员工 table,详细信息如下。

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");

现在我将范围分区添加到具有上述记录的现有员工table之上。

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.So 我将在分区 p0 中有 2 条记录用于 store_id 79 和 85,在分区 p3 中有 1 条记录用于具有 store_id 的记录302.

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

 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:-

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

正如 mysql 关于 information_schema.partitions table 的文档所解释的那样,

TABLE_ROWS

The number of table rows in the partition.

For partitioned InnoDB tables, the row count given in the TABLE_ROWS column is only an estimated value used in SQL optimization, and may not always be exact.

所以,在你的情况下,估计是不正确的。