インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法

インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法

テーブルの作成とインデックスの作成

テーブルtbl1を作成(
id int ユニーク、sname varchar(50)、
インデックス tbl1_index_sname(sname desc)
);

既存のテーブルにインデックスを作成するための構文

テーブル名 (フィールド名 [長さ] [昇順|降順]) に [一意|全文|空間] インデックス インデックス名を作成します。

MySQL では、インデックスを使用して、ORDER BY および GROUP BY ステートメントでソートおよびグループ化操作をすばやく実行することもできます。

インデックスの最適化を通じて MySQL ORDER BY ステートメントを最適化します。

1. ORDER BYインデックスの最適化

SQL ステートメントが次のとおりである場合:

SELECT [列1],[列2],…. FROM [テーブル] ORDER BY [並べ替え];

[sort] 列にインデックスを作成すると、インデックスを使用して order by を最適化できます。

2. WHERE + ORDER BYのインデックス最適化

のような:

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [値] ORDER BY [sort];

最適化による順序付けを実現するために、結合インデックス (columnX、sort) を作成します。

注: columnX が複数の値に対応する場合、次のステートメントはインデックスを使用して order by を最適化することはできません。

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY [sort];

3. WHERE + 複数フィールド ORDER BY

SELECT * FROM [テーブル] WHERE uid=1 ORDER x,y LIMIT 0,10;

order by を最適化するためにインデックス (uid, x, y) を作成する方が、インデックス (x, y, uid) を作成するよりもはるかに優れています。

MySQL Order By はインデックスを使用してソートを最適化することはできません

1. 異なるインデックス キーに対して ORDER BY を実行します (key1 と key2 のインデックスを個別に作成します)。

SELECT * FROM t1 ORDER BY key1, key2;

2. 連続していないインデックス キー部分に対して ORDER BY を実行します (key_part1 と key_part2 に結合インデックスを作成し、key2 にインデックスを作成します)。

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

3. ASC と DESC の両方を使用する: (key_part1、key_part2 は共同インデックスを作成します)

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

4. レコードの検索に使用されるインデックス キーが ORDER BY に使用されるキーと同じではありません: (key1 と key2 は別々にインデックス化されます)

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

5. WHERE 列と ORDER BY 列に式 (関数) を適用する場合、インデックスを使用して order by を最適化することはできません。

SELECT * FROM t1 ORDER BY YEAR(ログイン日付) LIMIT 0,10;

特別なヒント:

1>MySQL は一度に 1 つのインデックスしか使用できません。複数のフィールドでインデックスを使用する場合は、複合インデックスを作成します。

2> ORDER BY 操作では、MySQL は、ソート条件がクエリ条件式でない場合にのみインデックスを使用します。

上記は、MySQL がインデックスを使用して ORDER BY ソート ステートメントを最適化する方法の詳細です。MySQL の ORDER BY ソート ステートメントの最適化の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL Order By 構文の紹介
  • MySQLは「order by」がどのように機能するかを簡単に理解します
  • MySQL Order by ステートメントの使用法と最適化の詳細な説明
  • MySQL の Order by ステートメントのクエリ効率を向上させる 2 つのアイデアの分析
  • MySQL の order by と group by シーケンスの問題の詳細な分析
  • MySQL データベースのインデックス順序の詳細な説明

<<:  ウェブ開発におけるクロスドメインの理由に対する複数のソリューション

>>:  ローカルアイデアアクティベーションサーバーの構築に関する詳細なチュートリアル

推薦する

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...

docker runの--rmオプションの使用方法

Docker コンテナが終了しても、デバッグを容易にし、ユーザー データを保持するために、デフォルト...

MySQLアカウントのパスワード変更方法(概要)

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

【HTML要素】画像の埋め込み方法

img 要素を使用すると、HTML ドキュメントに画像を埋め込むことができます。画像を埋め込むには、...

コンテナDockerCommitを介してイメージを送信し、DockerPushでイメージをプッシュします。

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

ウェブページに埋め込まれた Flash と IE、FF、Maxthon の互換性の問題

いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...

Javascript クロージャの使用シナリオの原則の詳細

目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...

Docker で Kong API Gateway をインストールして使用する詳細なチュートリアル

1 はじめにKong は単純な製品ではありません。この記事で言及されている Kong は主に Kon...

MySQLでデータベースのインストールパスを表示する方法

mysql コマンドを使用して、mysql のインストール パスを表示できます。 # 次の 2 つの...

Linux ファイル/ディレクトリの権限と所有権の管理

1. ファイルの権限と所有権の概要1. アクセス権Read r: ファイルの内容を表示し、ディレクト...

Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

序文Linux のファイルまたはディレクトリの権限については、通常の rwx 権限についてすべて知っ...

JSはUUIDとNanoIDというユニークなIDメソッドを生成します

目次1. NanoIDがUUIDに取って代わる理由2. jsを生成する方法3. ナノID方式序文:ユ...

元のPATHを上書きしてコマンドが見つからないというメッセージが表示されるコマンド失敗の問題を解決する方法

同僚から、LINUX サーバー上の多くのコマンドが (コマンドが見つかりません) というプロンプトで...