「このテーブルのカラム、実際には使われていないのでは?」
大規模なテーブルを運用していると、そんな疑問が出てきます。
そこで今回は MySQLで未使用カラムを一括チェックするSQL を紹介します。
仕組み
INFORMATION_SCHEMA.COLUMNS から対象テーブルのカラム一覧を取得
GROUP_CONCAT で動的に SUM(CASE ...) を生成
各カラムごとに「NULLでも空文字でもない値の件数」をカウント
全て 0 なら「使っていないカラム」と判定できる
-- 1セッション内の group_concat の制限を拡大
SET SESSION group_concat_max_len = 1000000;
-- 動的SQLを生成
SET @sql = (
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(
'SUM(CASE WHEN ', COLUMN_NAME, '
IS NOT NULL AND ', COLUMN_NAME, '
<> '''' THEN 1 ELSE 0 END) AS ', COLUMN_NAME, '
'
SEPARATOR ', '
),
' FROM your_database
.your_table
'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_database'
AND TABLE_NAME = 'your_table'
);
-- 実行
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
実行例
例えば、your_database.your_table テーブルで実行すると、下記のような結果が得られます:
COL1 COL2 COL3 ...
123 0 56 ...
ここで 0 になっているカラムが 未使用カラム です。
ポイント
SET SESSION group_concat_max_len = 1000000; を入れないと、カラム数が多い場合にSQLが途中で切れてしまうことがあります。
データベース名とテーブル名は必ず自分の環境に合わせて修正してください。
実際には「一度も値が入っていない」ことを確認するだけなので、業務的に本当に不要かは別途判断してください。
まとめ
この方法を使えば、数百カラムあるテーブルでも一発で「使っていないカラム」を洗い出せます。
スキーマ整理やリファクタリング時の調査にぜひ活用してください! 🚀