MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのSHOW INDEX・SHOW INDEXES・SHOW KEYSの違いはある?実行例で徹底解説

結論:SHOW INDEX・SHOW INDEXES・SHOW KEYSに違いはない

MySQLにおけるSHOW INDEXSHOW INDEXESSHOW 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を使うのがおすすめです。

  1. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (    

  2. MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント

    データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成