본문 바로가기
내가 보는 개발 공부/Mysql

테이블에서 사용하지 않은 컬럼 찾기

by JeeGAe 2025. 8. 14.

SET @db  := 'YOUR_DB';
SET @tbl := 'YOUR_TABLE';
SET SESSION group_concat_max_len = 1000000;

SELECT GROUP_CONCAT(q SEPARATOR ' UNION ALL ')
INTO @sql
FROM (
  SELECT CONCAT(
    'SELECT ', QUOTE(c.column_name), ' AS column_name, ',
    'SUM(CASE WHEN ',
      CASE
        WHEN c.data_type IN ('char','varchar','tinytext','text','mediumtext','longtext','enum','set','json')
          THEN CONCAT('`', c.column_name, '` IS NOT NULL AND TRIM(`', c.column_name, '`) <> ', CHAR(39), CHAR(39))
        WHEN c.data_type IN ('binary','varbinary','tinyblob','blob','mediumblob','longblob')
          THEN CONCAT('`', c.column_name, '` IS NOT NULL AND OCTET_LENGTH(`', c.column_name, '`) > 0')
        ELSE
          CONCAT('`', c.column_name, '` IS NOT NULL')
      END,
    ' THEN 1 ELSE 0 END) AS non_empty_count, ',
    'COUNT(*) AS total_rows ',
    'FROM `', c.table_schema, '`.`', c.table_name, '`'
  ) AS q
  FROM information_schema.columns c
  WHERE c.table_schema=@db AND c.table_name=@tbl
) s;

-- 비어있는 컬럼만 출력
SET @sql = CONCAT('SELECT column_name FROM (', @sql, ') AS x WHERE non_empty_count = 0');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

'내가 보는 개발 공부 > Mysql' 카테고리의 다른 글

Mysql 덤프 뜨는 방법  (0) 2025.04.01