为什么SHOW TABLE STATUS显示Rows少了40%
测试环境中,有一个表执行 SHOW TABLE STATUS
时看到的 rows
结果总是和真实数量相差了将近40%:
-- 执行SHOW TABLE STATUS,看到Rows只有约655万行数据<br>greatsql> SHOW TABLE STATUS LIKE 't1'G<br>*************************** 1. row ***************************<br> Name: t1<br> Engine: InnoDB<br> Version: 10<br> Row_format: Dynamic<br> Rows: 6553584<br> Avg_row_length: 9375<br> Data_length: 61444456448<br>Max_data_length: 0<br> Index_length: 0<br> Data_free: 4194304<br> Auto_increment: NULL<br> Create_time: 2024-03-01 15:04:31<br> Update_time: NULL<br> Check_time: NULL<br> Collation: utf8mb4_bin<br> Checksum: NULL<br> Create_options:<br> Comment:<br><br>-- 执行COUNT(*)看到实际有1000万行数据<br>greatsql> select count(*) from t1;<br>+----------+<br>| count(*) |<br>+----------+<br>| 10000000 |<br>+----------+<br><br>-- 表结构如下<br>greatsql> SHOW CREATE TABLE t1G<br>*************************** 1. row ***************************<br> Table: t1<br>Create Table: CREATE TABLE `t1` (<br> `A0` bigint NOT NULL,<br> `A1` double DEFAULT NULL,<br> `A2` decimal(40,0) DEFAULT NULL,<br> `A3` double DEFAULT NULL,<br> `A4` decimal(5,2) DEFAULT NULL,<br> `A5` smallint DEFAULT NULL,<br> `A6` int DEFAULT NULL,<br> `A7` bigint DEFAULT NULL,<br> `A8` decimal(19,0) DEFAULT NULL,<br> `A9` decimal(38,0) DEFAULT NULL,<br> `A10` decimal(40,0) DEFAULT NULL,<br> `A11` datetime DEFAULT NULL,<br> `A12` datetime(6) DEFAULT NULL,<br> `A13` datetime DEFAULT NULL,<br> `A14` datetime(3) DEFAULT NULL,<br> `A15` datetime(6) DEFAULT NULL,<br> `A17` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A18` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A19` char(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A20` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A21` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A22` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A23` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A24` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A25` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A26` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A27` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A28` varchar(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> `A29` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,<br> PRIMARY KEY (`A0`),<br> KEY `a0` (`A0`)<br>) ENGINE=InnoDB;<br>