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 イメージ サーバーをインストールして展開する方法

推薦する

Linux システムで IPv6 をサポートするように Nginx を設定する方法

1. 既存のnginxがipv6をサポートしているかどうかを確認する既存の nginx が ipv6...

HTML タグでの this の使用法の紹介

例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...

JavaScript で配列の変更を監視する方法

序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...

VUE v-for の :key の詳細な説明

v-for タグにキーが追加されていない場合。 <!DOCTYPE html> <...

JavaScript の基本オブジェクト

目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...

MySql データベースにおける単一テーブル クエリと複数テーブル結合クエリの効率の比較

この間、プロジェクトに取り組んでいるときに、データ間の接続が非常に複雑なモジュールに遭遇しました。テ...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

CSS3はNESゲームコンソールのサンプルコードを実装します

成果を達成する実装コードhtml <input type="radio" ...

vue+django でファイルをダウンロードする例

目次1. 概要2. Django プロジェクト3. Vueプロジェクト1. 概要プロジェクトで、ダウ...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

Vue 構成リクエストの複数サーバーソリューションの詳細な説明

1. 解決策1.1 インターフェースコンテキストパスの説明2 つのバックエンド インターフェイス サ...

Linux デバイス用ネットワーク ドライバーの紹介

有線ネットワーク: イーサネット 無線ネットワーク: 4G、WiFi、Bluetooth、5G 概要...

ウェブデザイナーは3つの側面からウェブページを最適化する必要がある

<br />帯域幅の増加に伴い、Web ページ上のオブジェクトも増えているため、Web ...

HTML+CSS+JavaScript でガールフレンド版のスクラッチ カードを作成します (一度見ればすぐに覚えられます)

誰もがスクラッチ チケットで遊んだことがあると思います。子供の頃、ポケットにお金が入るとすぐに友達に...

Linux環境でrmによって誤って削除されたファイルを回復する方法

目次序文RMの後には希望はあるのでしょうか?最前線を使ってファイルを取得するextundeleteを...