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

MySQLでSELECTクエリを高速化するには?IN()句を活用した効率的な検索方法

MySQLでSELECTクエリを高速化するには?IN()句の活用方法

MySQLで複数の条件値を指定してデータを検索する際、IN()句を活用することでクエリを高速化できます。IN()は内部的にインデックスを利用して動作するため、OR条件を多数並べるよりも効率的に処理されます。

この記事では、サンプルテーブルを作成し、実際にIN()を使ったクエリを実行しながら、その使い方と効果を解説します。

ステップ1:サンプルテーブルの作成

まず、以下のCREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable1618
    -> (
    -> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ClientName varchar(20),
    -> ClientEmailId varchar(30)
    -> );
Query OK, 0 rows affected (1.53 sec)

ステップ2:レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを追加します。

mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('Chris Brown','Brown323@gmail.com');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('David Miller','MillerDavid@gmail.com');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('John Doe','998John_Doe@gmail.com');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('John Smith','999John_Smith@gmail.com');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('Adam Smith','Adam_Smith@gmail.com');
Query OK, 1 row affected (0.17 sec)

ステップ3:全レコードの確認

SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1618;

実行すると、次のような結果が出力されます。

+----------+--------------+-------------------------+
| ClientId | ClientName   | ClientEmailId           |
+----------+--------------+-------------------------+
|      1 | Chris Brown  | Brown323@gmail.com      |
|      2 | David Miller | MillerDavid@gmail.com   |
|      3 | John Doe     | 998John_Doe@gmail.com   |
|      4 | John Smith   | 999John_Smith@gmail.com |
|      5 | Adam Smith   | Adam_Smith@gmail.com    |
+----------+--------------+-------------------------+
5 rows in set (0.00 sec)

ステップ4:IN()を使った高速クエリの実行

以下が、IN()句を利用して特定のメールアドレスを持つレコードを抽出するクエリです。複数の値をカンマ区切りで指定するだけで、該当するすべての行を一度に取得できます。

mysql> select * from DemoTable1618 where ClientEmailId IN('998John_Doe@gmail.com','999John_Smith@gmail.com','MillerDavid@gmail.com');

実行結果は以下の通りです。

+----------+--------------+-------------------------+
| ClientId | ClientName   | ClientEmailId |
+----------+--------------+-------------------------+
|      2 | David Miller | MillerDavid@gmail.com   |
|      3 | John Doe     | 998John_Doe@gmail.com   |
|      4 | John Smith   | 999John_Smith@gmail.com |
+----------+--------------+-------------------------+
3 rows in set (0.00 sec)

まとめ

IN()句は、指定した複数の値に一致するレコードを効率的に取得できる便利な構文です。内部的にインデックスを活用するため、大量のデータを扱う場合でも高速な検索が可能になります。OR条件を何度も繰り返す代わりにIN()を使うことで、SQLの可読性とパフォーマンスの両方を向上させられます。ぜひ日々のクエリ最適化に取り入れてみてください。

  1. MySQLのSELECTクエリでエイリアス(別名)を使う方法をわかりやすく解説

    MySQLのSELECTクエリでエイリアスを使うには?MySQLでは、カラムやテーブルに別名(エイリアス)を設定する際にASキーワードを使用します。エイリアスを使うと、出力結果のカラム名を分かりやすい名前に変更できるため、レポート作成やアプリケーションでのデータ表示に非常に便利です。この記事では、実際にサンプルテーブルを作成し、SELECTクエリでエイリアスを設定する手順を順番に解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテスト用のテーブルを作成しましょう。mysql> create table DemoTable ( Name varchar(

  2. MySQLでSELECTクエリの結果を並べ替える方法|ORDER BY句の基本と実践例

    データベース操作では、テーブルから特定のデータや行を抽出することが日常的によくあります。通常、SELECT文で取得した行はテーブル内に格納されている順序で返されますが、場合によっては、特定の列を基準にして昇順または降順で並べ替えた結果を取得したいこともあるでしょう。そんなときに活躍するのが「ORDER BY」句です。以下で具体的な使い方を見ていきましょう。例えば、「name」フィールドを含む複数のカラムを持つテーブルがあるとします。テーブルからすべての行を取得したいけれど、名前のアルファベット順に並べ替えた状態で結果を受け取りたい——こうしたケースでは、ORDER BY句を使って「name」フ