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

int型カラムへのMySQLインデックス:作成方法と検索速度への効果

テーブルに大量のレコードが格納されている場合、int型のカラムにインデックスを追加することは、クエリを高速化するための有効な手段です。一方で、レコード数が少ないテーブルに対してインデックスを作成しても、大きな効果は期待できません。むしろ、インデックスの管理コストだけがかかる可能性があります。

この記事では、実際にテーブルを作成しながら、int型カラムへのインデックスの付け方と、その検索性能への影響を解説します。

1. インデックス付きテーブルの作成

まずは、UserId カラムにインデックスを設定したテーブルを作成します。CREATE TABLE 文の中で INDEX(UserId) を指定するだけで、int型カラムにインデックスを追加できます。

mysql> create table indexOnIntColumnDemo
    -> (
    -> UserId int,
    -> UserName varchar(20),
    -> UserAge int,
    -> INDEX(UserId)
    -> );
Query OK, 0 rows affected (0.85 sec)

2. テーブル構造の確認

DESC コマンドでテーブル構造を確認しましょう。

mysql> desc indexOnIntColumnDemo;

実行結果は以下のとおりです。UserId の Key 列に「MUL」と表示されている点に注目してください。これは、このカラムにインデックスが設定されていることを示しています。

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| UserId   | int(11)     | YES  | MUL | NULL    |       |
| UserName | varchar(20) | YES  |     | NULL    |       |
| UserAge  | int(11)     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.04 sec)

3. テストデータの挿入

次に、INSERT 文を使っていくつかのレコードを挿入します。

mysql> insert into indexOnIntColumnDemo values(1001,'John',23);
Query OK, 1 row affected (0.22 sec)
mysql> insert into indexOnIntColumnDemo values(1002,'Sam',25);
Query OK, 1 row affected (0.14 sec)
mysql> insert into indexOnIntColumnDemo values(1003,'Carol',22);
Query OK, 1 row affected (0.24 sec)
mysql> insert into indexOnIntColumnDemo values(1004,'Mike',26);
Query OK, 1 row affected (0.14 sec)

4. 全レコードの表示

SELECT 文ですべてのレコードを表示してみます。

mysql> select * from indexOnIntColumnDemo;

出力結果は次のとおりです。

+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 1001   | John     |      23 |
| 1002   | Sam      |      25 |
| 1003   | Carol    |      22 |
| 1004   | Mike     |      26 |
+--------+----------+---------+
4 rows in set (0.00 sec)

5. インデックスを活用した高速検索

検索を高速化するには、WHERE句の条件としてインデックスが設定されたint型カラムを使用します。これにより、MySQLは全件スキャンではなくインデックスを参照して該当レコードへ直接アクセスできます。

mysql> select * from indexOnIntColumnDemo where UserId=1004;

出力結果:

+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 1004   | Mike     |      26 |
+--------+----------+---------+
1 row in set (0.00 sec)

まとめ:インデックス使用時の注意点

  • 大量データに有効: レコード数が多いテーブルでは、int型カラムへのインデックスにより検索速度が大幅に向上します。
  • 少量データでは不要: レコード数が少ない場合、インデックスによる高速化の恩恵はほとんどなく、書き込み時のオーバーヘッドだけが増えることがあります。
  • 確認方法: DESC コマンドで Key 列が「MUL」と表示されていれば、インデックスが正しく設定されています。

なお、インデックスが実際に使用されているかどうかを詳しく調べたい場合は、クエリの先頭に EXPLAIN を付けて実行すると、実行計画を確認できます。パフォーマンスチューニングの際にぜひ活用してください。

  1. MySQLでBLOB型として宣言された列の長さを取得するクエリ

    BLOB型の列の長さを取得するにはMySQLでBLOB型として宣言された列のデータ長を取得するには、LENGTH()関数を使用します。LENGTH()関数は、文字列のバイト数を返すため、BLOB型のようなバイナリデータのサイズ確認に適しています。ここでは、実際にテーブルを作成し、BLOB型の列の長さを取得する手順を順番に解説します。1. BLOB型の列を持つテーブルを作成するまず、列の型をBLOBとして宣言したテーブルを作成しましょう。mysql> create table DemoTable ( Title blob ); Query OK, 0 rows affected (

  2. MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説

    MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query