ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?