将分区添加到 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.
所以,在你的情况下,估计是不正确的。
我在 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.
所以,在你的情况下,估计是不正确的。