【mysql】如何查看大表记录行数

发布于:2024-12-20 ⋅ 阅读:(71) ⋅ 点赞:(0)

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;