1. 使用 ANALYZE TABLE 和 SHOW TABLE STATUS
- 1.ANALYZE TABLE 可以更新表的统计信息,然后使用 SHOW TABLE STATUS 来检察估算的行数。
- 2.示例
- -- 更新表的统计信息
- ANALYZE TABLE your_table_name;
- -- 查看表的状态信息,包括估算的行数
- SHOW TABLE STATUS LIKE 'your_table_name';
复制代码
- 3.在输出效果中,Rows 列表现的是表的估算行数。
2. 查询 INFORMATION_SCHEMA 表
- 1.查询 INFORMATION_SCHEMA.TABLES 表也可以获取表的估算行数。
- 2.示例
- SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES
- WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';
复制代码
- 3.TABLE_ROWS 表现的是估算值,不是精确的行数。
3. 使用索引统计信息
- 1.在 InnoDB 存储引擎中,可以使用索引的统计信息来获取行数。通过 SHOW INDEX 或查询 INFORMATION_SCHEMA.STATISTICS 可以获得索引的估算行数。
- 2.使用示例
- SHOW INDEX FROM your_table_name;
复制代码 4. 维护行数缓存
- 1.为了在生产情况中高效地获取精确的行数,可以使用触发器维护一个单独的表,用于记录每个大表的行数。(不发起,维护迁移太难了,影响性能)
- 2.这种方法可以提供及时的精确计数,而不会每次都扫描整个表。
- 3.示例
- -- 创建行数缓存表
- CREATE TABLE table_row_count (
- table_name VARCHAR(255) PRIMARY KEY,
- row_count INT
- );
- -- 初始化行数
- INSERT INTO table_row_count (table_name, row_count)
- VALUES ('your_table_name', (SELECT COUNT(*) FROM your_table_name));
- -- 创建插入触发器
- CREATE TRIGGER after_insert_trigger
- AFTER INSERT ON your_table_name
- FOR EACH ROW
- BEGIN
- UPDATE table_row_count
- SET row_count = row_count + 1
- WHERE table_name = 'your_table_name';
- END;
- -- 创建删除触发器
- CREATE TRIGGER after_delete_trigger
- AFTER DELETE ON your_table_name
- FOR EACH ROW
- BEGIN
- UPDATE table_row_count
- SET row_count = row_count - 1
- WHERE table_name = 'your_table_name';
- END;
- -- 查询行数
- SELECT row_count
- FROM table_row_count
- WHERE table_name = 'your_table_name';
复制代码 5. 使用分区计数
- 1.假如表使用了分区,可以分别统计每个分区的行数,然后汇总得到总行数。这种方法可以避免在单个大表上进行全表扫描。
- 2.示例
- SELECT SUM(partition_count)
- FROM (
- SELECT COUNT(*) AS partition_count
- FROM your_table_name PARTITION (partition_1)
- UNION ALL
- SELECT COUNT(*) AS partition_count
- FROM your_table_name PARTITION (partition_2)
- -- 继续添加其他分区
- ) AS total_count;
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |