MySQL 重複インデックスと冗長インデックスの例の分析

MySQL 重複インデックスと冗長インデックスの例の分析

この記事では、例を使用して MySQL の重複インデックスと冗長インデックスについて説明します。ご参考までに、詳細は以下の通りです。

重複インデックス: 1 つの列または複数の列に同じ順序で作成された複数のインデックスを指します。

冗長インデックス: 2つのインデックスでカバーされる列が重複している

冗長インデックスは、一部の特殊なシナリオでインデックス カバレッジを使用するため、より高速になります。

シナリオ

例えば、記事とタグのテーブル

+——+——-+——+
| id | アートid | タグ |
+——+——-+——+
| 1 | 1 | PHP |
| 2 | 1 | Linux |
| 3 | 2 | MySQl |
| 4 | 2 | オラクル |
+——+——-+——+

実際の使用では、クエリには2つの種類があります

  • artid - クエリ記事 - タグ
  • タグ—クエリ記事—artid

SQL ステートメント:

artid=2 の t11 からタグを選択します。
tag='PHP' の場合、t11 から artid を選択します。

冗長インデックスを作成してインデックス カバレッジを実現し、クエリの効率を向上させることができます。

1. 記事タグテーブルを作成する

このテーブルには 2 つのインデックスがあります。1 つは at、もう 1 つは ta です。両方のインデックスは artid フィールドと tag フィールドを使用します。

テーブル `t16` を作成します (
 `id` int(10) 符号なし NOT NULL AUTO_INCREMENT,
 `artid` int(10) unsigned NOT NULL DEFAULT '0',
 `tag` char(20) NOT NULL デフォルト ''
 主キー (`id`)、
 キー `at` (`artid`,`tag`),
 キー `ta` (`tag`,`artid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 デフォルト CHARSET=utf8

2. 2つのSQL文をテストする

tag='PHP' の場合、t11 から artid を選択します。

このステートメントのクエリ分析の Extra には、Using index が含まれています。これは、ここでインデックス カバレッジが使用されていることを意味します。インデックス カバレッジを使用した後は、クエリ データに行を返す必要がないため、クエリ効率は比較的高くなります。

這里寫圖片描述

artid = 1 の t11 からタグを選択します。

このステートメントのクエリ分析の Extra には、Using index が含まれています。これは、ここでインデックス カバレッジが使用されていることを意味します。インデックス カバレッジを使用した後は、クエリ データに行を返す必要がないため、クエリ効率は比較的高くなります。

列表內容

インデックスカバレッジの詳細については、前の記事「インデックスカバレッジ」を参照してください。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQLクエリの冗長インデックスと未使用のインデックス操作
  • MySQL の冗長インデックスと重複インデックスの詳細な説明
  • MySQL における冗長インデックスと重複インデックスの違い

<<:  Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

>>:  WeChatアプレットが計算機機能を実装

推薦する

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明適切な読者: モバイル開発sqlite3 データを mysql に移行する場合、多くの構文...

JavaScriptとTypeScriptの関係

目次1. JavaScript とは何ですか? 2. JavaScript は何に使用されますか? ...

Unix/Linuxフォークの隠れたオーバーヘッド

目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...

ウェブデザインにおけるテキスト入力ボックスのパラメータの説明

一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われています。これは HTML 言...

JavaScript操作要素は、ページコンテンツのスタイルを変更する方法を教えます

目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...

Baidu 入力メソッドが API を公開、自由に移植して使用できると主張

百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...

Apache をインストールした後、サービスを開始できません (サービスを開始するとエラー コード 1 が表示されます)

目次1. エラーメッセージ2. エラーの原因3. 解決策1. エラーメッセージ1. インストール後、...

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

Nginx リバース プロキシと負荷分散を実装する方法 (Linux ベース)

ここで nginx のリバース プロキシを試してみましょう。リバースプロキシ方式とは、インターネット...

JSON.parse と JSON.stringify の使い方の詳細な説明

目次JSON.パースJSON.parse 構文リバイバーパラメータJSON.parse の機能その他...

MySQL ストアドプロシージャの長所と短所の分析

MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

Vueはテーマ切り替えのための複数のアイデアを実装します

目次テーマを動的に変更する最初の方法: 動的コンポーネント2番目の方法はルーティング分離です要約する...

geo モジュールを使用して Nginx でホワイトリストを設定する例

元の構成: http { ...... limit_conn_zone $binary_remote...