MySQL/MariaDB 테이블의 Row count 구하기
· Version : MySQL 5.6
MySQL / MariaDB 에서 테이블의 Row count를 구하는 방법에 대해서 알아본다. 기본적으로 단일 테이블에 대한 Row count는 아래 스크립트로 간단히 확인할 수 있다.
SELECT COUNT(*) FROM table_name; |
특정 데이터베이스에 대해 모든 테이블의 Row count를 구하는 경우 아래 스크립트를 사용할 수 있다. 조회하려는 데이터베이스의 테이블 정보를 참조하여 Row count 스크립트르 생성하여 호출하는 방식이다.
SELECT CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',table_name,'\' table_name, COUNT(*) rows FROM ', table_name)SEPARATOR ' UNION '),' ORDER BY table_name' ) INTO @sql FROM ( SELECT table_name FROM information_schema. tables WHERE table_schema = 'DBNAME' AND table_type = 'BASE TABLE' ) table_list
PREPARE s FROM @sql ; EXECUTE s; DEALLOCATE PREPARE s; |
MySQL 8.0 이상을 사용하는 경우 CTE를 사용할 수 있다.
WITH table_list AS ( SELECT table_name FROM information_schema. tables WHERE table_schema = 'DBNAME' AND table_type = 'BASE TABLE' )
SELECT CONCAT(GROUP_CONCAT(CONCAT("SELECT '" ,table_name, "' table_name,COUNT(*) rows FROM " ,table_name) SEPARATOR " UNION "), ' ORDER BY table_name') INTO @sql FROM table_list;
PREPARE s FROM @sql ; EXECUTE s; DEALLOCATE PREPARE s; |
데이터베이스의 모든 테이블에 대한 Row count를 얻는 가장 빠른 방법은 information_schema 데이터베이스에서 조회하는 것이다.
SELECT table_name, table_rows FROM information_schema. tables WHERE table_schema = 'DBNAME' ORDER BY table_name; |
하지만 위 방법은 실제 데이터 행수와 동기화 되지 않기 때문에 정확하기 않을 수 있다. 이를 방지 하려면 데이터를 조회하기 전에 ANALYZE TABLE 명령을 실행하도록 한다.
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... |
실제 정확한 행수가 필요하지 않는 경우information_schema를 조회하는것이 데이터베이스 오버헤드를 줄일 수 있어 권장하는 방법이다.
[참고자료]
· https://dev.mysql.com/doc/refman/5.7/en/information-schema.html
· https://dev.mysql.com/doc/refman/5.7/en/analyze-table.html
2017-10-25 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com
MySQL, MariaDB, MySQL row count, MySQL information_schema, Derived table, Group_concat, concat, table variables
'MySQL, MariaDB' 카테고리의 다른 글
MySQL/MariaDB 서버 커넥션 사용 현황 모니터링 (1) | 2019.03.24 |
---|---|
MySQL/MariaDB Cluster Index (0) | 2019.03.24 |
MySQL/MariaDB InnoDB Storage Engine (Data Page) (0) | 2019.03.24 |
MySQL/MariaDB 데이터를 CSV로 내보내기 (0) | 2019.03.24 |
MySQL/MariaDB Table Update Safe 모드 (0) | 2019.03.24 |