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

MySQLでSELECT DISTINCTを高速化する方法:インデックス活用テクニック

MySQLでSELECT DISTINCTを高速化するには

MySQLでSELECT DISTINCTクエリの実行速度を改善したい場合、対象となるカラム(またはカラムの組み合わせ)にインデックスを作成するのが最も効果的な方法です。インデックスが存在すると、MySQLは重複値の排除を効率的に行えるため、大量データでも高速な処理が可能になります。

ここからは、実際にサンプルテーブルを使いながら手順を解説します。

1. サンプルテーブルを作成する

まずは検証用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Name varchar(40)
);
Query OK, 0 rows affected (1.13 sec)

2. インデックスを作成する

次に、対象カラムに対してインデックスを作成します。

mysql> create index Name_Index on DemoTable(Name);
Query OK, 0 rows affected (1.56 sec)
Records: 0 Duplicates: 0 Warnings: 0

これで「Name」カラムにインデックス「Name_Index」が設定されました。

3. テストデータを挿入する

INSERTコマンドを使って、重複を含むレコードを登録します。

mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.16 sec)

4. 登録された全レコードを確認する

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

mysql> select *from DemoTable;

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

+-------+
| Name  |
+-------+
| Chris |
| Chris |
| Chris |
| Mike  |
| Sam   |
+-------+
5 rows in set (0.00 sec)

5. DISTINCTで重複を除外して取得する

続いて、重複を除いた一意なレコードのみを取得するクエリを実行します。

mysql> select distinct Name from DemoTable;

実行結果:

+-------+
| Name  |
+-------+
| Chris |
| Mike  |
| Sam   |
+-------+
3 rows in set (0.02 sec)

まとめ

SELECT DISTINCTを高速化したい場合は、対象カラムにインデックスを作成するのが有効です。インデックスによりソート済みの構造が維持されるため、重複値の判定処理が効率化され、クエリ全体のパフォーマンスが向上します。

なお、実運用では以下の点にも注意しましょう。

  • インデックスを追加すると書き込み(INSERT/UPDATE/DELETE)の性能がわずかに低下する
  • 複数カラムに対してDISTINCTを行う場合は、複合インデックス(コンポジットインデックス)の利用を検討する
  • EXPLAINコマンドで実行計画を確認し、インデックスが正しく使われているかチェックするとよい
  1. MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】

    MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected