스토리지 엔진 기준으로 MySQL의 모든 테이블 조회하기
MySQL에서는 INFORMATION_SCHEMA.TABLES 뷰에 WHERE 절을 적용하면 특정 스토리지 엔진(예: InnoDB)을 사용하는 모든 테이블을 손쉽게 확인할 수 있습니다. 이 방법은 서버 전체 데이터베이스를 대상으로 조회하기 때문에, 여러 데이터베이스에 흩어져 있는 테이블을 한 번에 파악해야 할 때 특히 유용합니다.
1. 기본 문법
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'InnoDB';
engine 조건에는 'InnoDB' 외에도 'MyISAM', 'MEMORY', 'CSV' 등 원하는 스토리지 엔진 이름을 자유롭게 지정할 수 있습니다.
2. 전체 메타데이터 조회 예제
테이블 구조, 행 수, 생성 시간 등 상세 정보까지 함께 확인하려면 SELECT * 를 사용합니다.
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'InnoDB';
실행하면 아래와 같은 형태의 결과가 출력됩니다(가독성을 위해 일부만 발췌).
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | +---------------+--------------+--------------------+------------+--------+---------+------------+------------+ | def | mysql | innodb_table_stats | BASE TABLE | InnoDB | 10 | Dynamic | 65 | | def | mysql | innodb_index_stats | BASE TABLE | InnoDB | 10 | Dynamic | 221 | | def | mysql | db | BASE TABLE | InnoDB | 10 | Dynamic | 2 | | def | mysql | user | BASE TABLE | InnoDB | 10 | Dynamic | 7 | | def | mysql | global_grants | BASE TABLE | InnoDB | 10 | Dynamic | 28 | | def | sys | sys_config | BASE TABLE | InnoDB | 10 | Dynamic | 6 | | def | business | mytable | BASE TABLE | InnoDB | 10 | Dynamic | 0 | | def | business | tblstudent | BASE TABLE | InnoDB | 10 | Dynamic | 2 | | def | business | autoincrementtable | BASE TABLE | InnoDB | 10 | Dynamic | 5 | | def | education | university | BASE TABLE | InnoDB | 10 | Dynamic | 2 | | def | education | student | BASE TABLE | InnoDB | 10 | Dynamic | 2 | ... (총 94개 행) +---------------+--------------+--------------------+------------+--------+---------+------------+------------+ 94 rows in set (4.68 sec)
주요 컬럼 의미
- TABLE_SCHEMA: 테이블이 속한 데이터베이스(스키마) 이름
- TABLE_NAME: 테이블 이름
- ENGINE: 해당 테이블이 사용하는 스토리지 엔진
- TABLE_ROWS: 대략적인 행(row) 수
- CREATE_TIME / UPDATE_TIME: 테이블 생성 시각과 마지막 수정 시각
- TABLE_COLLATION: 테이블에 적용된 문자열 비교 규칙(콜레이션)
3. 테이블 이름만 간결하게 조회하기
테이블 이름 목록만 필요하다면 table_name 컬럼 하나만 선택하면 됩니다.
mysql> SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'InnoDB';
출력 결과(일부):
+---------------------------+ | TABLE_NAME | +---------------------------+ | innodb_table_stats | | innodb_index_stats | | db | | user | | default_roles | | role_edges | | global_grants | | password_history | | func | | plugin | | servers | | tables_priv | | columns_priv | | help_topic | | help_category | | help_relation | | help_keyword | | time_zone_name | | time_zone | | time_zone_transition | | time_zone_transition_type | | time_zone_leap_second | | procs_priv | | component | | slave_relay_log_info | | slave_master_info | | slave_worker_info | | gtid_executed | | server_cost | | engine_cost | | proxies_priv | | sys_config | | mytable | | primarytable | | tblstudent | | modifydatatype | | nulldemo | | groupdemo | | yourtable | | texturl | | varcharurl | | addcolumntable | | demoschema | | demoint | | nthrecorddemo | | int1demo | | intdemo | | textdemo | | chardemo | | varchardemo | | demo | | latandlangdemo | | smallintdemo | | student | | moviecollection | | bookindexes | | duplicatebookindexes | | tbluni | | existsrowdemo | | demoascii | | modifycolumnnamedemo | | demobcrypt | | primarytable1 | | foreigntable | | autoincrementtable | | demoauto | | demoonreplace | | employeetable | | whereconditon | | moneydemo | | varchardemo1 | | varchardemo2 | | presenthistory | | pasthistory | | columnvaluenulldemo | | demoemptyandnull | | nonasciidemo | | nullwithselect | | autoincrement | | unsigneddemo | | university | | dateadddemo | | distinctdemo | | groupdemo1 | | incasesensdemo | | demo1 | | spacecolumn | | milliseconddemo | | primarytabledemo | | foreigntabledemo | | trailingandleadingdemo | | duplicatefound | +---------------------------+ 94 rows in set (0.03 sec)
참고: 더 정교하게 조회하는 방법
특정 데이터베이스 안에서만 확인하고 싶다면 WHERE 절에 TABLE_SCHEMA 조건을 추가하거나, SHOW TABLE STATUS 명령을 활용할 수도 있습니다.
-- 특정 데이터베이스(business)의 InnoDB 테이블만 조회
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE engine = 'InnoDB' AND table_schema = 'business';
-- SHOW 문으로 엔진 정보 확인
SHOW TABLE STATUS FROM business WHERE Engine = 'InnoDB';
이처럼 INFORMATION_SCHEMA를 활용하면 복잡한 설정 없이도 스토리지 엔진별 테이블 현황을 빠르게 점검할 수 있으며, 데이터베이스 관리나 마이그레이션 작업 시 매우 실용적으로 활용됩니다.