MySQLのSHOW INDEX・SHOW INDEXES・SHOW KEYSの違いはある?実行例で徹底解説
結論:SHOW INDEX・SHOW INDEXES・SHOW KEYSに違いはない
MySQLにおけるSHOW INDEX、SHOW INDEXES、SHOW KEYSの3つのコマンドには、機能上の違いは一切ありません。どれもまったく同じ意味を持ち、指定したテーブルに設定されているインデックス情報を表示します。
これらは歴史的な経緯から複数の構文が併存しているだけで、実行結果は完全に同一になります。ここでは、実際にサンプルテーブルを作成し、3つのコマンドを順番に実行して、出力結果が同じになることを確認してみましょう。
検証用テーブルの作成
まず、従業員IDと従業員名を持つシンプルなテーブルを作成します。
mysql> create table DemoTable1549
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20)
-> );
Query OK, 0 rows affected (0.82 sec)
この時点で、主キー(PRIMARY KEY)としてEmployeeIdに自動的にインデックスが作成されています。
インデックスの作成
続いて、EmployeeNameカラムに対してインデックスを作成します。
mysql> create index name_index1 on DemoTable1549(EmployeeName);
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
これで、PRIMARY KEYとname_index1の2つのインデックスが存在する状態になりました。
SHOW INDEXの実行例
SHOW INDEXを実行してみます。
mysql> show index from DemoTable1549;
実行結果は以下の通りです。
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | demotable1549 | 0 | PRIMARY | 1 | EmployeeId | A | 0 | NULL | NULL | | BTREE | | | YES | | demotable1549 | 1 | name_index1 | 1 | EmployeeName | A | 0 | NULL | NULL | YES | BTREE | | | YES | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 2 rows in set (0.17 sec)
SHOW INDEXESの実行例
次にSHOW INDEXESを実行します。
mysql> show indexes from DemoTable1549;
実行結果は以下の通りです。
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | demotable1549 | 0 | PRIMARY | 1 | EmployeeId | A | 0 | NULL | NULL | | BTREE | | | YES | | demotable1549 | 1 | name_index1 | 1 | EmployeeName | A | 0 | NULL | NULL | YES | BTREE | | | YES | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 2 rows in set (0.00 sec)
SHOW KEYSの実行例
最後にSHOW KEYSを実行します。
mysql> show keys from DemoTable1549;
実行結果は以下の通りです。
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | demotable1549 | 0 | PRIMARY | 1 | EmployeeId | A | 0 | NULL | NULL | | BTREE | | | YES | | demotable1549 | 1 | name_index1 | 1 | EmployeeName | A | 0 | NULL | NULL | YES | BTREE | | | YES | +---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ 2 rows in set (0.00 sec)
まとめ
3つのコマンドの出力を見比べると、内容が完全に一致していることが分かります。主キーのPRIMARYと、後から作成したname_index1の両方が表示され、Non_unique(一意性)、Key_name(インデックス名)、Column_name(対象カラム)、Index_type(BTREE)などの情報も共通しています。
- SHOW INDEX … 最も一般的に使われる標準的な構文
- SHOW INDEXES … 複数形の表記で、意味はSHOW INDEXと同一
- SHOW KEYS … 古いバージョンとの互換性のために残っている構文
どれを選んでも動作に差はないため、チームやプロジェクトのコーディング規約に合わせて統一して使用すれば問題ありません。迷った場合は、公式ドキュメントでも標準として案内されているSHOW INDEXを使うのがおすすめです。
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (
-
MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント
データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成