VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
INFORMATION_SCHEMA는 표준 SQL 쿼리를 통해 MySQL 서버 메타데이터를 노출하는 가상 데이터베이스입니다. SHOW TABLES, SHOW COLUMNS, DESCRIBE가 알려줄 수 있는 모든 것을 INFORMATION_SCHEMA도 알려줄 수 있습니다 — 그것도 WHERE, JOIN, 집계의 모든 기능과 함께.
테이블과 열
데이터베이스의 모든 테이블 나열하기:table_rows는 InnoDB 테이블의 경우 추정치(인덱스 통계에서 파생)이며 정확한 개수가 아닙니다. 정밀한 값에는 SELECT COUNT(*)를 사용하세요.
테이블의 모든 열 나열하기:
인덱스
테이블의 모든 인덱스 나열하기:제약 조건
모든 제약 조건(PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK) 나열하기:저장 루틴
모든 저장 프로시저와 함수 나열하기:뷰와 트리거
모든 뷰 나열하기:권한
현재 사용자의 유효 권한 보기:주요 테이블 참조
INFORMATION_SCHEMA와 SHOW 명령 비교
SHOW 명령은 축약형이며, 대개 INFORMATION_SCHEMA에 대응물이 있습니다:
필터링, 조인, 집계가 필요할 때는
INFORMATION_SCHEMA 쿼리가 더 낫습니다. 대화형 검사에는 SHOW 명령으로 충분합니다.
자주 묻는 질문
INFORMATION_SCHEMA 쿼리는 느린가요?
InnoDB 테이블의 경우 일부 쿼리(특히TABLES와 STATISTICS에 대한 쿼리)는 인덱스 통계 갱신을 유발하며, 큰 스키마에서는 느릴 수 있습니다. 메타데이터를 자주 조회한다면, 캐시된 통계에 더 빠르게 접근할 수 있는 mysql.innodb_table_stats와 mysql.innodb_index_stats를 사용하세요.
table_rows 값이 왜 잘못되어 보이나요?
information_schema.tables.table_rows는 InnoDB 인덱스 통계에서 나온 추정치이며 실시간 개수가 아닙니다. 큰 테이블에서는 40-50% 차이가 날 수 있습니다. 통계를 새로 고치려면 ANALYZE TABLE tablename을 실행하거나, 정확한 개수에는 SELECT COUNT(*)를 사용하세요.
문제 해결
참고
- MySQL 사용자 관리 — 권한 부여 감사를 위한 INFORMATION_SCHEMA.USER_PRIVILEGES
- MySQL의 스키마 마이그레이션 — 마이그레이션 전에 스키마를 검사하기 위한 INFORMATION_SCHEMA 조회
- MySQL 인덱스의 동작 방식 — 찾아낸 인덱스 메타데이터에 따라 조치하기