ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
MySQL でインデックス一覧を確認する
MySQL でテーブルに作成されたインデックスを確認する方法は複数あります。用途に応じて使い分けるのがコツです。
| 用途 | コマンド |
|---|---|
| とにかく一覧を見たい | SHOW INDEX FROM テーブル名; |
| DDL を取得したい | SHOW CREATE TABLE テーブル名; |
| SQL でフィルタ / JOIN | SELECT ... FROM information_schema.STATISTICS |
| 未使用インデックスを探す | sys.schema_unused_indexes |
| クエリでの使用を確認 | EXPLAIN SELECT ... |
1. SHOW INDEX — 標準コマンド
-- 基本構文
SHOW INDEX FROM テーブル名;
-- 別 DB を指定
SHOW INDEX FROM mydb.users;
-- 別名 (どれも同じ動き)
SHOW INDEXES FROM users;
SHOW KEYS FROM users;
出力例:
+--------+------------+---------------+--------------+-------------+-----------+-------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality |
+--------+------------+---------------+--------------+-------------+-----------+-------------+
| users | 0 | PRIMARY | 1 | id | A | 10000 |
| users | 0 | uniq_email | 1 | email | A | 10000 |
| users | 1 | idx_name_age | 1 | name | A | 9500 |
| users | 1 | idx_name_age | 2 | age | A | 10000 |
+--------+------------+---------------+--------------+-------------+-----------+-------------+
主要カラムの意味
| カラム | 意味 |
|---|---|
| Key_name | インデックス名。PRIMARY が主キー |
| Non_unique | 0 = UNIQUE / 1 = 重複可 |
| Seq_in_index | 複合インデックスの何番目のカラムか |
| Column_name | 対象カラム名 |
| Collation | 並び順(A=ASC / D=DESC / NULL=未ソート) |
| Cardinality | 推定ユニーク値数。低いと選択性が悪い |
| Sub_part | プレフィックスインデックスのプレフィックス長 |
| Index_type | BTREE / HASH / FULLTEXT / SPATIAL |
| Visible | YES / NO(8.0+)。NO は実行計画で無視される |
2. SHOW CREATE TABLE — DDL 全体
カラム定義 + インデックス + 外部キーをまとめて確認したいときに。
SHOW CREATE TABLE users \G*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`name` varchar(50) NOT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_email` (`email`),
KEY `idx_name_age` (`name`, `age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. information_schema.STATISTICS
SQL でフィルタしたいときは information_schema.STATISTICS を SELECT します。
-- 特定テーブルのインデックス一覧
SELECT
INDEX_NAME,
COLUMN_NAME,
SEQ_IN_INDEX,
NON_UNIQUE,
INDEX_TYPE,
CARDINALITY
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
AND TABLE_NAME = 'users'
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
-- DB 全体でユニーク制約だけ抽出
SELECT TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'mydb' AND NON_UNIQUE = 0
GROUP BY TABLE_NAME, INDEX_NAME;
4. 未使用インデックスを探す (MySQL 5.7+)
本番環境で「使われていないインデックス」を探すのは sys スキーマが便利。Performance Schema が有効なら自動で集計されます。
-- 一度も使われていないインデックス
SELECT * FROM sys.schema_unused_indexes;
-- インデックス使用統計
SELECT * FROM sys.schema_index_statistics
WHERE table_schema = 'mydb'
ORDER BY rows_selected DESC;
5. EXPLAIN でクエリ実行計画を確認
「このクエリでこのインデックスが使われているか?」を見るには EXPLAIN。
EXPLAIN SELECT * FROM users WHERE name = 'tarou' AND age = 30;+----+-------------+-------+------+-------------------+--------------+---------+-------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+-------------------+--------------+---------+-------+------+-----------------------+
| 1 | SIMPLE | users | ref | idx_name_age | idx_name_age | 207 | const | 1 | Using index condition |
+----+-------------+-------+------+-------------------+--------------+---------+-------+------+-----------------------+
key 列がそのクエリで実際に使われたインデックス名。NULL なら全表スキャン。
FAQ
Q: PRIMARY KEY と UNIQUE の見分け方
A: SHOW INDEX で Key_name = 'PRIMARY' が主キー。それ以外で Non_unique = 0 が UNIQUE インデックス。
Q: インデックスのサイズを知りたい
A: information_schema.TABLES の INDEX_LENGTH 列でテーブルごとの合計サイズが取れる。個別は mysql.innodb_index_stats。
Q: Cardinality が NULL や極端に低い
A: 統計が古い。ANALYZE TABLE テーブル名; で更新できる。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 実行計画の出力
- テーブルに紐づくインデックスを確認する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?