MySQL インデックスの原理と使用例の分析

MySQL インデックスの原理と使用例の分析

この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • インデックスとは何か
  • インデックスを作成
    • 通常のインデックス
    • ユニークインデックス
    • 全文索引
    • 単一列インデックス
    • 複数列インデックス
  • インデックスを表示
  • インデックスの削除

リリース日: 2018-04-14


インデックスとは何か:

  • インデックスはデータを素早く見つけるのに役立ちます
  • 基本的に、すべてのインデックスは一意である必要があります (一意でないインデックスもあります)。そのため、ある程度、データの一意性も制約されます。
  • インデックスはデータ テーブル オブジェクト上に作成され、1 つ以上のフィールドで構成されます。これらのフィールドは「キー」を形成し、データ構造 (B ツリーまたはハッシュ テーブル) に格納されます。 [データ構造により、Bツリーインデックス(innodb\myisamエンジン)とハッシュインデックス(メモリエンジン)に分類できます]
  • インデックスはデータ検索を高速化するために使用されるため、通常は検索に頻繁に必要となるフィールド (where でよく使用されるフィールドなど) で使用されます。
  • MySQL でサポートされているインデックス タイプは、共通インデックス、一意インデックス、フルテキスト インデックス、単一列インデックス、複数列インデックス、および空間インデックスです。

補充:

  • 主キーとインデックスの違い: 主キーもインデックスの一種であり、主キーも一意のインデックスですが、インデックスの主な機能は検索速度を向上させることです。一方、主キーの主な機能はレコードの一意性を識別することです (もちろん、検索も容易になります)。

インデックスを作成します。

通常のインデックス: インデックス

  • 通常のインデックスは、「一意」または「空ではない」という要件がないインデックスです。
  • 文法:
    • テーブルを作成します。テーブル名 (フィールド データ型、フィールド データ型、... インデックス|キー [インデックス名] (フィールド [インデックスの長さ] [昇順|降順]));
      • index|keyは、indexキーワードまたはkeyキーワードを使用できることを意味します。
      • インデックス名はオプションです。入力されていない場合は、インデックス名がフィールド名になります。
      • フィールドはインデックス付きフィールドであり、複数のフィールドが存在する場合があります (複数列インデックス)。
      • インデックスの長さ(オプション)(一部のエンジンでは最大長が設定されていますが、詳細な調査を行わない限り、これに遭遇することはほとんどないため、ここでは説明しません)
      • asc|desc はオプションであり、インデックス内の「キーワード」の並べ替えを表します。
    • 既存のテーブル構造にインデックスを追加するには、create index index name on table name (field [index length] [asc|desc]); を実行します。
    • 既存のテーブル構造にインデックスを追加するには、次のようにします。alter table table name add index|key index name (field [index length] [asc|desc]);

一意のインデックス:

  • 一意のインデックスでは、インデックスを作成するときにフィールド内のデータが一意である必要があります。
  • 構文を作成します:
    • テーブルを作成します。テーブル名 (フィールド データ型、フィールド データ型、... 一意のインデックス|キー [インデックス名] (フィールド [インデックスの長さ] [昇順|降順]));
      • [パラメータ情報は共通インデックスを参照]
    • 既存のテーブル構造にインデックスを追加するには、テーブル名に一意のインデックス インデックス名を作成します (フィールド [インデックス長] [昇順|降順])。
    • 既存のテーブル構造にインデックスを追加するには、次のようにします。alter table table name add unquiue index|key index name (field [index length] [asc|desc]);

全文索引: 全文索引

  • フルテキスト インデックスは通常、char、varchar、text のデータ型を持つフィールドで使用され、これらの長いデータの検索を容易にします。
  • MyISAMストレージエンジンはフルテキストインデックスをサポートします
  • 構文を作成します:
    • テーブルを作成します。テーブル名 (フィールド データ型、フィールド データ型、... フルテキスト インデックス|キー [インデックス名] (フィールド [インデックス長] [昇順|降順]));
      • [パラメータ情報は共通インデックスを参照]
    • 既存のテーブル構造にインデックスを追加するには、create fulltext index index name on table name (field [index length] [asc|desc]); を実行します。
    • 既存のテーブル構造にインデックスを追加するには、次のようにします。alter table table name add fulltext index|key index name (field [index length] [asc|desc]);

単一列インデックス:

  • インデックス付きフィールドが 1 つしかない場合は、単一列インデックスになります。

複数列インデックス:

  • インデックスされたフィールドが複数ある場合は、複数列インデックスになります。
  • 作成構文: 上記の (field [インデックス長] [asc|desc]) を (field1 [インデックス長] [asc|desc],field2 [インデックス長] [asc|desc],field1 [インデックス長] [asc|desc]) に変更します。

インデックスを表示:

  • テーブル構造を表示することでインデックスを表示できます
    • image
  • テーブル作成ステートメントを表示することでインデックスを表示できます。
    • image
  • インデックスを表示するには、Explain ステートメントを使用できます。Explain は、MySQL ステートメント実行の時間効率を判断するために使用されます。
    • したがって、条件としてインデックス付きフィールドを加えた explain select ステートメントを使用できます。
    • 結果の possible_key は、使用できるインデックスと、そのキーが実際に使用するインデックスです。
    • 例えば:
      select * from user_info where username="lilei"; を説明します。 
      image

インデックスを削除するには:

  • テーブル名のインデックス インデックス名を削除します。
    • 例えば:
      user_info のインデックス myindex を削除します。

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

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

以下もご興味があるかもしれません:
  • MySQL インデックス失敗の原理
  • MySQL全文インデックスの原理と欠点
  • MySQLクエリ最適化プロセスを理解する
  • MySQL ページングクエリ最適化テクニック
  • MySQLグループクエリ最適化方法
  • MySQL のインデックスの原理とクエリの最適化の詳細な説明

<<:  この記事では、Vue 3.0 レスポンシブの使い方を説明します。

>>:  Linux で FTP イメージ サーバーをインストールして展開する方法

推薦する

MySQL における KEY、PRIMARY KEY、UNIQUE KEY、INDEX の違い

タイトルで提起された問題は、段階的に分解して解決することができます。 MySQL では KEY と ...

固定ボトムコンポーネントを実装した Vue の例

目次【効果】 【実施方法】 【効果】 【実施方法】 <テンプレート> <div i...

Vue.$set の失敗の落とし穴の発見と解決

偶然、プロジェクト内でVue.$setが無効であることがわかりましたデータ フィルタリングを追加する...

MySQL における楽観的ロックと悲観的ロックの例

データベース管理システムにおける同時実行制御のタスクは、データベース内の同じデータに同時にアクセスす...

MySQLの連結関数CONCATの使い方の詳しい説明

前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...

CSS3 フレックスボックス自動記入の書き方を詳しく解説

この記事では、主に CSS3 フレックス エラスティック ボックスの自動塗りつぶしの書き方について詳...

動的なテーブル効果を実現するJavaScript

この記事では、動的なテーブル効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Linux MySQL ルートパスワードを忘れた場合の解決方法

MySQL データベースを使用する際、何らかの理由で長期間 MySQL にログインしていない場合、ま...

nginx+php実行リクエストの動作原理の詳細な説明

PHPの仕組みまず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し...

Reactドラッグフックを実装するための100行以上のコード

序文ソースコードは合計で 100 行強しかありません。これを読めば、react-dnd などの成熟し...

LinuxにNginxをインストールする詳細な手順

1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...

Linux DHCPサービスの詳細な説明

目次1. DHCP サービス (動的ホスト構成プロトコル) 1. 背景2. 概要3. 利点4.DHC...

MySQL交換パーティションの詳細な例

MySQL交換パーティションの詳細な例序文exchange パーティションを紹介する前に、まず my...

浮遊要素によって引き起こされる問題と解決策の詳細な説明

1. 問題複数のフローティング要素は親要素の幅を拡張できず、親要素の高さが 0 になる可能性がありま...

Linux での sshd サービスとサービス管理コマンドの詳細な説明

sshd SSH は Secure Shell の略で、アプリケーション層のセキュリティ プロトコル...