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を使用する際のよくある落とし穴

推薦する

MySQL マスタースレーブ遅延問題の解決方法

今日は、マスタースレーブ遅延が発生する理由とその対処方法について説明します。しっかり座って出発の準備...

Vue が配列の変更を監視できない問題の解決方法

目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...

MySQL DATEDIFF 関数を使用して 2 つの日付間の時間間隔を取得する方法

説明する2 つの日付間の時間間隔を返します。文法DateDiff(間隔、日付1、日付2 [、週の最初...

VMware 上の CentOS に Oracle12.2 をサイレント インストールする詳細なグラフィック チュートリアル

環境準備: VMware+CentOS、jdk 1. システムディスクのサイズを確認する1. コマン...

いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...

仮想マシンクローン Linux centos6.5 システム ネットワーク カード構成グラフィック チュートリアル

Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...

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

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

JavaScript の手ぶれ補正とスロットリングの説明

目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...

React プロジェクトで eslint の Baidu スタイルを使用する詳細な説明

1. Baidu Eslint Ruleプラグインをインストールする npm i -D eslint...

個人ブログシステムを構築するためのDockerの超シンプルな実装

Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...

Vueのdiffアルゴリズムについての簡単な説明

目次概要バーチャルドム原理実装プロセスパッチ方式sameVnode関数patchVnode関数upd...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

Centos7 への MySQL8 のインストールチュートリアル

MySQL 8 の新機能: MySQL をバージョン 5.x から 8.x に直接アップグレードする...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

負のz-indexを持つ要素がクリックできない問題の解決策

最近、ポップアップ広告に取り組んでいました。デフォルト ページには z-index が設定されていな...