MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明

MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明

1. クラスター化インデックス

テーブル データはインデックスの順序で保存されます。つまり、インデックス項目の順序は、テーブル内のレコードの物理的な順序と一致します。クラスター化インデックスの場合、リーフノードには実際のデータ行が格納され、個別のデータ ページは存在しません。

実際のデータには物理的な順序が 1 つしか存在しないため、テーブルに作成できるクラスター化インデックスは最大で 1 つだけです。

物理ファイルからも、InnoDB (クラスター化インデックス) のデータ ファイルには、データ構造ファイル .frm とデータ ファイル .idb のみがあることが分かります。データとインデックス情報は、.idb に一緒に保存されます。

2. 非クラスター化インデックス

テーブルデータが格納される順序は、インデックスの順序とは関係ありません。非クラスター化インデックスの場合、リーフ ノードにはインデックス フィールド値とデータ ページのデータ行への論理ポインターが含まれ、行数はデータ テーブル内のデータ量と一致します。

物理ファイルからも、MyISAM (非クラスター化インデックス) インデックス ファイル .MYI とデータ ファイル .MYD が別々に保存されており、比較的独立していることがわかります。

要約:

クラスター化インデックスと非クラスター化インデックスの違いは次のとおりです。

クラスター化インデックス (innoDB) のリーフ ノードはデータ ノードです。

非クラスター化インデックス (MyISAM) のリーフ ノードは依然としてインデックス ファイルですが、インデックス ファイルには対応するデータ ブロックへのポインターが含まれています。

非クラスター化インデックスの場合、インデックスを通じて必要な行番号を取得するたびに、リーフ上のディスク アドレスを通じてディスクからデータを取得する (行を返す) 必要があり、時間がかかります。データの取得時間を最適化するために、InnoDB エンジンはクラスター化インデックスを使用します。
クラスター化インデックス。つまり、インデックス リーフ ページにデータを格納します。 InnoDB エンジンの場合、リーフ ページには行に対応するアドレスが格納されなくなり、データが直接格納されます。

これにより、戻り操作による時間の消費を回避できます。 これにより、一部のクエリでは InnoDB が MyISAM よりもさらに高速になります。

ps. クエリ時間に関しては、MyISAM はパフォーマンスのために機能を犠牲にしており、クエリが高速であると一般に考えられています。しかし、必ずしもそうとは限りません。ほとんどの場合、MyISAM は InnoDB よりも高速です。ただし、クエリ時間は多くの要因によって影響を受けます。 InnoDB クエリが遅くなる理由は、トランザクションやロールバックなどをサポートしているため、InnoDB のリーフ ページには実際にはトランザクション ID (つまり、バージョン番号) とロールバック ポインターが含まれているからです。

アクションの説明クラスター化インデックスの使用非クラスター化インデックスの使用
列はグループ別にソートされることが多い使用使用
範囲内のデータを返します使用未使用
1つまたは非常に少数の異なる値未使用未使用
異なる値の数が少ない使用未使用
多数の異なる値未使用使用
頻繁に更新されるコラム未使用使用
外部キー列使用使用
主キー列使用使用
インデックス列を頻繁に変更する未使用使用

つまり、クラスター化インデックスは、頻繁に更新される列、頻繁に変更されるインデックス列、および少数の固有値には適していません。

以上がMySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明です。MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 学習チュートリアル クラスター化インデックス
  • MySQL クラスター化インデックスのページ分割原理の分析例
  • MySQL のクラスター化インデックスとクラスター化インデックスの成長の仕組みを理解する

<<:  DockerHubイメージリポジトリの使い方の詳しい説明

>>:  Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

推薦する

デザイナーの「職業病」について

デザイナーは世界で最も繊細で感情的な人々だと私はいつも感じています。私がこう言うときに優越感を感じる...

MySQLでデータテーブルを作成するときにエンジンMyISAM/InnoDBを設定する

mysql を構成するときに、構成ファイル内のデフォルトのストレージ エンジンを InnoDB に設...

期間限定フラッシュセール機能を実現するJavaScriptタイマー

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

ウェブページ内の 2 つのボックス モデル (W3C ボックス モデル、IE ボックス モデル)

Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...

Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

システムの初期のパーティション分割により、オペレーティング システム内の対応する / パーティション...

Docker 基本チュートリアル: Dockerfile 構文の詳細な説明

序文Dockerfile は Docker プログラムによって解釈されるスクリプトです。Docker...

VMware + Ubuntu18.04 による Hadoop クラスタ環境の構築に関するグラフィック チュートリアル

目次序文VMware クローン仮想マシン (準備、3 台の仮想マシンのクローン、1 台のマスター、2...

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...

Centos7.9 で独立したメール サーバーを構築するための詳細な手順

目次序文1. イントラネットDNS AレコードとMXレコードを構成する2. メールサーバの初期化設定...

vue+springbootでログイン認証コードを実現

この記事では、ログイン認証コードを実装するためのvue+springbootの具体的なコードを例とし...

MYSQL 左結合の最適化 (10 秒から 20 ミリ秒)

目次【機能背景】 [生のSQL] 【独自SQL解析】 【分析手順】 [最適化されたSQL] 【最適化...

Vueはechartsを使用して組織図を描画します

昨日、円形のプログレスバー (Vue 円形プログレスバーを参照してください) についてブログを書きま...

順序再構築に関する簡単な説明: MySQL シャーディング

目次1. 目的2. 環境整備1. 基本情報2. データベース環境の準備3. データベースを構築し、サ...

Django+vue 登録とログインのサンプルコード

登録するフロントエンドは、vue の axios を使用して値を渡し、取得したアカウントとパスワード...