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 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

期間限定フラッシュセール機能を実装するJavaScript

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

Vueの最初のレンダリングのプロセス全体についての簡単な説明

目次1. Vueの初期化vue エントリ ファイルフルバージョンとランタイムバージョンの違い1.1、...

動的な色切り替えの実装コードをサポートするために、CSS で SVG 画像を参照します。

表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...

Linux で大容量メモリ ページを持つ Oracle データベースを最適化する方法

序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...

JavaScriptの知識ポイントの詳しい説明

目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

JavaScriptのスリープ関数の使用

目次1.スリープ機能2.タイムアウトを設定する3. 約束4. 非同期待機5. 1秒後に出力1、2秒後...

JSONデータをHTMLで表示する方法

背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...

Apple Watchのインタラクションデザインにおける4つの全く異なる体験が明らかに

今日も Watch アプリのデザインに関する話です。私はケーススタディが大好きなので、同じトピックを...

グローバルトーストコンポーネントをカプセル化するVueの完全な例

目次序文1. vue-cliを使う1. Toastコンポーネントを定義する2. main.jsで設定...

nestjs における例外フィルター Exceptionfilter の具体的な使用法

Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...

Vue フロントエンドの Excel ファイルのエクスポートの詳細な実装計画

目次1. 技術の選択2. 技術的な実装vue-json-excelプラグインを使用して実装1. vu...