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アプレットが計算機機能を実装

推薦する

Linux での MySQL 5.7.19 のインストールに関する問題の概要

初めて仮想マシンに MySQL をインストールしたとき、多くの問題が発生しました。ここでそれらを書き...

MySQLでデータを削除してもディスク領域が解放されないのはなぜですか

目次問題の説明解決問題分析問題の説明MySQL で delete ステートメントを使用してデータを削...

要素 DateTimePicker+vue ポップアップボックスに時間のみが表示される問題を解決する

3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...

LDAP ユーザー認証を使用するように Linux を構成する方法

私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...

iconfontアイコンライブラリをvueに導入するエレガントな実践記録

目次序文SVGを生成するSVGスプライトの紹介プロジェクトアイコンを取得するプロジェクトのセットアッ...

SQL 実装 LeetCode (185. 部門内で最も給与の高い上位 3 名)

[LeetCode] 185. 部門別給与上位3位従業員テーブルにはすべての従業員が保持されます。...

Ubuntu LinuxにOracle Java 14をインストールする方法

最近、Oracle は Java 14 (または Oracle JDK 14) の一般公開を発表しま...

Javascript での JSBridge に関する予備的研究

目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

crontab スケジュールされたタスクが実行されない理由の分析と解決

序文Linux のスケジュールされたタスクを実装する方法としては、cron、anacron、at な...

丸い角や鋭い角を表現するために、絵の代わりに文字を使用する研究

Google Gmail ページから撮った次のスクリーンショットをご覧ください (同じ場所からスクリ...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

VUE ユニアプリコア知識の簡単な紹介

目次仕様a. ページファイルはVueの単一ファイルコンポーネント仕様に準拠しています。 b. コンポ...

MySQL の DDL と DML についての簡単な説明

目次序文1. DDL 1.1 データベース操作1.2 データテーブルの操作1.3 一般的なデータ型1...

DockerコンテナのIPアドレスを表示する方法

私はずっとDockerにはIPアドレスがないと思っていました。実はDockerのネットワークテンプレ...