ホームページ  >  記事  >  データベース  >  MySQL の高度なインデックス入門 (概要の共有)

MySQL の高度なインデックス入門 (概要の共有)

WBOY
WBOY転載
2022-11-23 16:51:551956ブラウズ

この記事では、mysql に関する関連知識を提供します。主に、インデックスの長所と短所、インデックスの分類、インデックス構造とインデックス作成など、インデックスに関する関連内容を紹介します。その他の問題については以下をご覧ください。皆様のお役に立てば幸いです。

MySQL の高度なインデックス入門 (概要の共有)

# 推奨学習:

mysql ビデオ チュートリアル

インデックスとは

MySQL の

インデックスの公式定義: インデックス (インデックス) は、MySQL がデータを効率的に取得するのに役立つデータ構造です。
インデックスの本質: インデックスはデータ構造です。
インデックスの目的: クエリの効率を向上させます。これは辞書と比較できます。

注: インデックスは、単純に 「ソートされた高速検索データ構造」 として理解できます。一般に、インデックス自体も非常に大きく、すべてをメモリに格納することは不可能であるため、インデックス ファイルの形式でディスクに格納されることがよくあります。私たちが通常インデックスと呼ぶものは、特に指定がない限り、B ツリー (多方向検索ツリー、必ずしもバイナリではない) 構造によって編成されたインデックス を指します。このうち、クラスター化インデックス、複合インデックス、プレフィックス インデックス、およびユニーク インデックスはすべてデフォルトで B ツリー インデックスを使用し、総称してインデックスと呼ばれます。

インデックス作成の長所と短所

利点

大学図書館がデータを改善するために書誌インデックスを構築する方法と同様取得の効率化、データベースの IO コストの削減

# インデックス列によるデータの並べ替え、データの並べ替えコストの削減、CPU 消費量の削減

欠点

インデックスは実際には主キーとインデックス フィールドを保存し、エンティティ テーブルのレコードを指すテーブルであるため、インデックス列もスペースを占有します。

インデックスによりクエリの速度は大幅に向上しますが、テーブルの INSERT、UPDATE、DELETE などのテーブルの更新速度も低下します。 MySQL はテーブルを更新する際、データの保存だけでなくインデックスファイルも保存する必要があるため、インデックスカラムを追加するフィールドが更新されるたびに、更新によってキー値が変更された後のインデックス情報が調整されます

インデックスは効率を向上させるための 1 つの要素にすぎません。MySQL に大量のデータ テーブルがある場合は、最適なインデックスの調査と構築、またはクエリの最適化に時間を費やす必要があります

MySQL インデックス分類

単一値インデックス

定義: インデックスには次の内容のみが含まれます単一列、およびテーブルには複数の単一列インデックスを持つことができます

注:一般に、テーブルには最大でも 5 つ以上のインデックスを含めることはできません

一意のインデックス

定義: インデックス列の値は一意である必要がありますが、NULL 値は許可されます

複合インデックス

定義: インデックスには複数の列が含まれます

基本構文

作成

    CREATE [UNIQUE] INDEX indexName ON mytable(columnnname(length));ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length))
  • 削除
    •  DROP INDEX [indexName] ON mytable;
    • 表示
      • SHOW INDEX FROM table_name\G
      • ALTER コマンドを使用する
        • データ テーブルのインデックスを追加するには、次の 4 つの方法があります。

        ALTER TABLE tbl_name ADD PRIMARY KEY ( column_list): このステートメントは主キーを追加します。つまり、インデックス値は一意である必要があり、NULL にすることはできません。

        ALTER TABLE tbl_name ADD UNIQUE Index_name(column_list): このステートメントによって作成されるインデックスの値は一意である必要があります (NULL を除き、NULL は複数回出現する可能性があります)。

        ALTER TABLE tbl_name ADD INDEX Index_name(column_list): 通常のインデックスを追加します。インデックス値は複数回出現する可能性があります。

        ALTER TABLE tbl_name ADD FULLTEXT Index_name(column_list): このステートメントは、フルテキスト インデックス作成に使用されるインデックスを FULLTEXT として指定します。

        注:

        [PRIMARY | UNIQUE | FULLTEXT]: インデックスのタイプ。それぞれ一意のインデックスとフルテキスト インデックスを示します。

        データテーブルを作成する場合、インデックスタイプは省略できます。

        [INDEX | KEY]: データテーブルにインデックスを作成することを指定します。 MySQL インデックス構造

        BTree インデックス

        • ハッシュ インデックス

        • ##full_textフルテキスト インデックス

        • ##R ツリー インデックス

        • ##インデックスの作成

          インデックスを作成する必要があるのはどのような場合ですか

        主キー自動 一意のインデックスを作成します

        クエリ条件として頻繁に使用されるフィールドにはインデックスを付ける必要があります

        • 他のテーブルに関連付けられたフィールドクエリでは、外部キー関係にインデックスが付けられます。

        • 更新のたびにレコードが更新されるだけでなくインデックスも更新されるため、頻繁に更新されるフィールドはインデックスの作成には適していません

        • Where 条件で使用されます。到達不能なフィールドにはインデックスは作成されません

        • 単一キー/結合インデックスの選択の問題 (結合インデックスは同時実行性が高い場合に作成される傾向があります)

        • クエリ内の並べ替えられたフィールド (並べ替えられたフィールドの場合)インデックスを渡す Access により並べ替え速度が大幅に向上します

        • クエリ内の統計またはフィールドのグループ化

        作成に適さない状況インデックス

        • テーブル レコードが少なすぎます

        • 頻繁に追加、削除、または変更されるテーブル

        • データは重複しており、テーブル フィールドが均等に分散されているため、最も頻繁にクエリされ、最も頻繁に並べ替えられるデータ列のみにインデックスを付ける必要があります。
          データ列に繰り返しのコンテンツが多く含まれている場合、インデックスを作成しても実際的な効果はあまりないことに注意してください

        推奨される学習: mysql ビデオ チュートリアル

        以上がMySQL の高度なインデックス入門 (概要の共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

        声明:
        この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。