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

MySQLで複合インデックスを使うべき場面とは?作成方法と確認手順をわかりやすく解説

MySQLにおける複合インデックスの活用シーン

複合インデックス(コンポジットインデックス)とは、複数のカラムを組み合わせて1つのインデックスとして定義する仕組みです。サブクエリを使用するケースをはじめ、次のような操作において大きな効果を発揮します。

  • 結合(JOIN):テーブル同士を結合する際の検索処理を高速化できる
  • 絞り込み(フィルタリング):WHERE句で複数条件を指定したデータ抽出が効率化される
  • 選択(SELECT):目的のカラムへ素早くアクセスできる

複合インデックスの基本構文

複合インデックスは、以下のようにカンマ区切りで複数のカラム名を指定して作成します。

index(column_name1, column_name2, column_name3, column_name4, ... ,N)

テーブル作成時に複合インデックスを設定する例

それでは、実際にテーブルを作成しながらインデックスを設定してみましょう。次の例では、idLastNameAddress の3カラムに対して複合インデックスを定義しています。

mysql> create table MultipleIndexDemo
    -> (
    -> id int,
    -> FirstName varchar(100),
    -> LastName varchar(100),
    -> Address varchar(200),
    -> index(id, LastName, Address)
    -> );
Query OK, 0 rows affected (0.57 sec)

インデックスが正しく作成されたか確認する方法

作成したインデックスの一覧は、SHOW INDEX コマンドで確認できます。

mysql> show index from MultipleIndexDemo;

実行結果は以下のとおりです。Seq_in_index 列を見ると、id → LastName → Address の順序でインデックスが構成されていることがわかります。

+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table             | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| multipleindexdemo |          1 | id       |            1 | id          | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |
| multipleindexdemo |          1 | id       |            2 | LastName    | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |
| multipleindexdemo |          1 | id       |            3 | Address     | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |
+-------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.18 sec)

複合インデックス利用時の注意点:左端プレフィックスの法則

複合インデックスを効果的に使うには、「左端プレフィックス(最左接頭辞)」の考え方を理解しておくことが重要です。上記の例のように idLastNameAddress の順で定義した場合、WHERE句の条件には先頭カラムである id を含める必要があります。LastNameAddress だけを単独で検索しても、このインデックスは利用されずフルテーブルスキャンになる可能性があるため、クエリの使用パターンに合わせてカラムの順序を設計しましょう。

  1. C++のスマートポインタとは?仕組みと使うべき場面をわかりやすく解説

    スマートポインタとは何かスマートポインタとは、C++の「生ポインタ(raw pointer/ベアポインタとも呼ばれます)」をラップするクラスのことです。生ポインタが指し示すメモリなどのリソースを自動的に管理する役割を担います。たとえば、プログラムのどこからもそのメモリ領域への参照が失われてしまった場合でも、スマートポインタは適切なタイミングでメモリを解放してくれます。この動作は、ガベージコレクタに似た働きをすると言えるでしょう。スマートポインタの主な種類C++には複数種類のスマートポインタが用意されており、標準ライブラリでは主に以下の3つが代表的です。std::unique_ptr所有権を1つ

  2. C++のfriend(フレンド)関数とは?必要になる場面と使い方を解説

    C++におけるfriend(フレンド)関数は、クラスのスコープ外で定義される関数でありながら、そのクラスのすべてのprivateメンバーおよびprotectedメンバーにアクセスする権限を持つ特別な関数です。フレンド関数のプロトタイプ宣言はクラス定義内に記述しますが、あくまで「宣言」だけであり、フレンド関数自体はそのクラスのメンバ関数にはなりません。 フレンドとして指定できるのは、通常の関数だけでなく、関数テンプレート、メンバ関数、さらにはクラスやクラステンプレートも可能です。クラスをフレンドとして指定した場合、そのクラス全体とそのすべてのメンバがフレンドとなります。 friend関数の宣言方