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

推薦する

Vueはログイン時に画像認証コードを実装します

この記事では、Vueログイン用画像認証コードの具体的なコードを例として紹介します。具体的な内容は以下...

MySQL 8.0 のインストール中に発生した 3 つの小さなエラーの概要

序文これまで当社ではMySQLの5.7シリーズを使用していましたが、バージョン8.0のリリースに合わ...

Linux に ASPNET.Core3.0 ランタイムをインストールするためのサンプル コード

# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...

ウェブデザインの概要

<br />1998年に最初の個人ページが誕生してから2008年の今日まで、デザイン業界...

MySQLの比較演算子正規表現マッチングREGEXPの使用の詳細な説明

1. データを初期化する `test_01` が存在する場合はテーブルを削除します。 テーブル「te...

デザイン理論:人の心を理解する方法

<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

JavaScript の例におけるループの使用法の詳細な説明

退屈だったので、ループに関する簡単な演習をいくつかまとめてみました。JS を学び始めたばかりの方に役...

テキストまたはJSONを返すようにnginxを設定する方法

特定のインターフェースをリクエストするときに、指定されたテキスト文字列または JSON 文字列を返す...

JavaScript を使用せずに HTML の a タグを無効にするには、純粋な CSS を使用します。

実際、この問題は、HTML の select タグを初めて学んだときにすでに発生していました。今日に...

Vue は小数点付きの星評価を実装します

この記事では、小数点付きの星評価を実装するためのVueの具体的なコードを参考までに共有します。具体的...

JS 継承の詳細

目次序文準備する要約する継承方法プロトタイプ継承プロトタイプチェーン継承コンストラクタの借用(クラス...

Ubuntu で起動時に自動的に起動するシェル スクリプトを作成する (推奨)

スクリプトを書く目的は、さまざまなサービスを手動で起動しなくて済むようにすることです(怠惰のためでも...

CSSでnグリッドレイアウトを実装する方法

一般的なアプリケーションシナリオ現在のアプリのインターフェースは基本的に同じであり、グリッドレイアウ...

Centos7.4 システムに yum ソースから mysql 5.6 をインストールする

システム環境: centos7.4 1. データベースがインストールされているかどうかを確認します。...