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コマンドで実行計画を確認し、インデックスが正しく使われているかチェックするとよい
-
MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】
MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected