MySQL インデックスの種類 (通常、ユニーク、フルテキスト) の説明

MySQL インデックスの種類 (通常、ユニーク、フルテキスト) の説明

MySQL のインデックスの種類には、通常のインデックス、一意のインデックス、全文インデックスがあります。インデックスを適切に使用すると、データベースのクエリ効率が大幅に向上します。以下では、3 種類のインデックスについて紹介します。

通常:これは最も基本的なインデックスです。制限はありません。MyIASM のデフォルトの BTREE タイプのインデックスは、ほとんどの場合に使用されるインデックスです。

unique:フィールド情報が繰り返されないことが保証されている場合、重複を許可しない一意のインデックスを示します。例えば、ID番号をインデックスとして使用する場合、ID番号を一意に設定できます。

全文: MyISAM テーブルでのみ使用可能な全文検索用のインデックスを示します。 FULLTEXT は、非常に長いテキストを検索する場合に最適です。短いテキストに使用されます。大容量のデータ テーブルの場合、フルテキスト インデックスの生成は非常に時間がかかり、ディスク領域を大量に消費することに注意してください。

MySQL のインデックス タイプ Normal、Unique、Full Text の違い

普通:

ほとんどの場合に使用できる通常のインデックスを示します

個性的:

制約は、データベース テーブル内の各レコードを一意に識別します。つまり、1 つのテーブル内の各レコードは一意にすることはできません (たとえば、ID カードは一意です)。一意 (列の一意性が必要) 制約と主キー (主キー = 一意 + NULL でない列の一意性) 制約は、どちらも列または列セットの一意性を保証します。主キーには自動的に定義された一意制約がありますが、各テーブルには複数の一意制約を設定できますが、主キー制約は 1 つしか設定できません。

MySQL でユニーク制約を作成する

全文:

全文検索を示します。長いテキストを検索する場合に最適です。短いテキストの場合は、インデックスを使用することをお勧めします。ただし、大量のデータを検索する場合は、最初にテーブルの全文インデックスを作成してからデータを書き込むよりも、グローバル インデックスなしでテーブルにデータを入れてから、インデックスの作成を使用して全文インデックスを作成する方がはるかに高速です。

要約すると、インデックスの種類は、インデックス付けされたフィールドのコンテンツ特性によって決まり、通常は「通常」が最も一般的です。

実際の操作では、テーブル内のどのフィールドをインデックスとして選択する必要がありますか?

インデックスをより効率的に使用するには、インデックスを作成するときに、どのフィールドに対してインデックスを作成するか、またどのような種類のインデックスを作成するかを考慮する必要があります。主な原則は 7 つあります。

1.一意のインデックスを選択

一意のインデックスの値は一意であり、このインデックスを使用してレコードをより迅速に識別できます。たとえば、学生テーブルの学生 ID は一意のフィールドです。このフィールドに一意のインデックスを作成すると、学生の情報をすぐに特定できます。フルネームを使用すると、名前が重複する可能性があり、検索が遅くなります。

2.並べ替え、グループ化、結合操作を頻繁に必要とするフィールドにインデックスを作成します。

ORDER BY、GROUP BY、DISTINCT、UNION などの操作を頻繁に必要とするフィールドでは、並べ替え操作に多くの時間がかかります。インデックスを作成すると、ソート操作を効果的に回避できます。

3.クエリ条件としてよく使用されるフィールドにインデックスを作成します

フィールドがクエリ条件として頻繁に使用される場合、このフィールドのクエリ速度はテーブル全体のクエリ速度に影響します。したがって、このようなフィールドにインデックスを作成すると、テーブル全体のクエリ速度が向上します。

4.インデックスの数を制限する

インデックスが多ければ多いほど良いです。各インデックスにはディスク領域が必要です。インデックスの数が増えるほど、必要なディスク領域も増えます。テーブルを変更する場合、インデックスの再構築と更新は面倒です。インデックスの数が増えるほど、テーブルの更新にかかる時間が長くなります。

5.データの少ないインデックスを使用するようにしてください

インデックス値が非常に長い場合、クエリ速度に影響します。たとえば、CHAR(100) 型フィールドの全文検索は、CHAR(10) 型フィールドの全文検索よりも確実に時間がかかります。

6.プレフィックスインデックスの使用を試みる

インデックス フィールドの値が非常に長い場合は、値のプレフィックスを使用してインデックスを付けることをお勧めします。たとえば、TEXT および BLOG タイプのフィールドの場合、全文検索は時間の無駄になります。フィールドの最初の数文字のみを検索すると、検索速度が向上します。

7.使用されなくなった、またはほとんど使用されないインデックスを削除します。

テーブル内のデータが大量に更新されたり、データの使用方法が変更されたりすると、元のインデックスの一部が不要になる場合があります。データベース管理者は、これらのインデックスを定期的に識別して削除し、更新操作に対するインデックスの影響を軽減する必要があります。

注: インデックスを選択する最終的な目的は、クエリを高速化することです。上記の原則は最も基本的なガイドラインですが、これに固執することはできません。読者は今後の学習や仕事でも実践を続けるべきです。アプリケーションの実際の状況に基づいて分析および判断し、最も適切なインデックス方法を選択します。

たとえば、ショッピングモールの会員カード システムを開発しているとします。このシステムにはメンバー テーブルがあります (一般的なフィールドは次のとおりです)。

会員番号 INT
メンバー名 VARCHAR(10)
会員ID番号 VARCHAR(18)
会員電話番号 VARCHAR(10)
メンバーの住所 VARCHAR(50)
メンバーの発言テキスト

次に、この会員番号をPRIMARYを使用して主キーとして使用します。

メンバー名のインデックスを作成する場合は、通常のINDEXを使用します。

会員ID番号のインデックスを作成する場合は、UNIQUE(一意、重複不可)を選択できます。

メンバーメモ情報のインデックスを作成する必要がある場合は、全文検索に FULLTEXT を選択できます。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL インデックスタイプの概要と使用上のヒントと注意事項
  • PHP+MySQL ツリー構造(無制限分類)データベース設計 2 つの例
  • MySQL で 2 つのデータベース テーブル構造を比較する方法
  • さまざまな種類のMySQLインデックス
  • MySQL の暗黙的な型変換によって発生するインデックス障害の解決策
  • MySQL ツリー構造データベース テーブル設計
  • PythonでMySQLデータベース構造ドキュメントを生成する
  • MySQL データベースの構造とインデックスの種類

<<:  Win10 + Ubuntu 16.04 デュアルシステム 完璧なインストールチュートリアル [詳細]

>>:  React Hooksを使用する際のよくある落とし穴

推薦する

Linux nohup コマンドの原理と例の分析

nohup コマンドUnix/Linux を使用する場合、通常はプログラムをバックグラウンドで実行す...

JS の compose 関数と pipe 関数の使い方の詳細な説明

目次作成機能配列プロトタイプの削減Array.prototype.reduceRightパイプ関数作...

JavaScript es6 における var、let、const の違いの詳細な説明

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか? ECMAS...

HTML+CSSを使用してマウスの動きを追跡する

ユーザーがプライバシーを意識するようになり、オンライン トラッキングに対する予防策を強化するにつれて...

HTML5+CSS3 ヘッダー作成例と更新

前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...

CSS でハートを描く 3 つの方法

以下では、CSS を使用してハートの形を描く 3 つの方法を紹介します。実装プロセスは非常にシンプル...

MySQL で日付時刻データを取得し、その後に .0 を追加する方法

MySQL のデータ型は datetime です。データベースに保存されているデータは 2015-0...

リクエストを転送したり、静的リソースファイルにアクセスしたりする複数の場所への nginx の実装

この記事では主に、リクエストを転送したり、静的リソース ファイルにアクセスしたりする nginx の...

JavaScript と CSS を最適化してウェブサイトのパフォーマンスを向上させる

<br /> 第 1 部と第 2 部では、Web サイトのパフォーマンス、ページ コンテ...

Dockerコンテナのデータボリュームの詳細な説明

何ですかまず、Docker の概念を見てみましょう。アプリケーションと実行環境をコンテナにパッケージ...

突然外部ネットワークからDockerにアクセスできなくなる問題の解決方法

マスターのメソッドによると、原因は sysctl net.ipv4.ip_forward であること...

VueとVueComponentの関係の詳細な説明

次のケースでは、これまでに学んだプロトタイプチェーンの知識ポイントを確認します。 // コンストラク...

メニューノードのすべての子ノードを再帰的に検索する MySQL メソッド

背景プロジェクトにはメニューノードのすべてのノードをチェックする要件があります。オンラインでチェック...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...

あまり一般的ではないが便利な CSS 属性操作の完全ガイド

1. カスタムテキスト選択 ::選択{ 背景: 赤; 色: 黒; } 2. ビデオコントロールからダ...