Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 스토리지 엔진별로 전체 테이블 조회하는 방법 (InnoDB 기준)

스토리지 엔진 기준으로 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를 활용하면 복잡한 설정 없이도 스토리지 엔진별 테이블 현황을 빠르게 점검할 수 있으며, 데이터베이스 관리나 마이그레이션 작업 시 매우 실용적으로 활용됩니다.