ホームページ データベース mysql チュートリアル MySQLインデックスの詳しい説明

MySQLインデックスの詳しい説明

Mar 26, 2017 pm 01:16 PM

MySQL のインデックスは B+tree を介しています。 B+tree はバランス型バイナリ ツリーの一種であるため、クエリ速度が非常に高速です。

インデックスは主にクラスター化インデックスと補助インデックスに分けられます:

クラスター化インデックス: mysqlのデータは主キーのクラスター化インデックスを介して保存されるため、リーフノードは各行のデータを保存するため、主キーを使用します。

これが非常に高速である理由は、主キーがクラスター化インデックスであるためですが、実際の使用では、そのような B+ ツリーが 1 つだけ構築されるため、主キーが一意である理由が説明できます。

インターネット上の画像の引用:

各層での検索は IO 操作であり、一般的に B+tree 層の数は 2 ~ 4 であるため、最悪の場合のみ実行する必要があります。 4 回の IO 操作。

補助インデックス: 補助インデックスとクラスター化インデックスの違いは、すべてのデータがリーフ ノードに保存されるわけではなく、データの場所が保存されることです。これは、補助インデックスを使用してデータを検索し、クラスター化インデックスのツリーを通じて詳細情報を検索することと同じです。

インターネット上の画像からの引用:

この画像は論理的な画像ですが、最下層はリーフ ノードを介してクラスター化インデックスを指します。つまり、最初のタイプの画像を通過する必要があります。次は

ロジック。

最終結果は、クラスター化インデックス ツリーを指す複数の補助インデックス ツリーになります

(図は本当に醜いです)

いつインデックスを作成すべきかについて

これはツリーなので、 through 二分探索法で検索するため、whereの条件として使用するのに適しており、値の範囲も広く、インデックスを作成するのに適しています。範囲が狭いもの (is_delete、sex などの列挙型) には適していません。

特定の状況については、show Index を通じて分析できます:

show index from company_related_person
ログイン後にコピー

結果:

次にカーディナリティを通じて計算します

select 105/(select count(*) from company_related_person) from DUAL
ログイン後にコピー

ここで得られた結果は 0.913 です (この値はストレージ容量に関連しており、これが最適です)この値が 1 に近いほど、インデックスの効率が高くなります。計算された値が非常に小さい場合は、インデックスを作成しないことをお勧めします

Explain

EXPLAIN select * from company_related_person where company_id='2'
ログイン後にコピー

Output

によるインデックス key は現在使用されているインデックス列を表します。最後の追加は、どのメソッドが使用されるかを示します。ここで、「インデックスを使用」は、ディスクが直接読み取られることを示します。 。

SQL パフォーマンス最適化の目標: 少なくとも範囲レベルに達すること。要件は参照レベルであり、const にできればそれが最善です。

1) 定数 1 つのテーブルには一致する行 (主キーまたは一意のインデックス) が最大 1 つあり、最適化フェーズ中にデータを読み取ることができます。

2) ref は、通常のインデックスの使用を指します。

3) range はインデックスの範囲取得を実行します

4) インデックスはディスクから直接読み取ることを意味します

上の図からも、ref を使用していることがわかります

インデックスとキーの違いについて:

インデックスを作成するときに、「インデックスとキーの違いは何ですか?」という質問がよくあります。 。キーは、主キー (Primary Key)、外部キー (Foreign Key) など、データの整合性チェックや一意性制約に使用される、リレーショナル モデル理論の一部であるキー値です。インデックスは実装レベルにあります。たとえば、テーブルの任意の列にインデックスを付けることができ、インデックス付きの列が SQL ステートメントの Where 条件に含まれる場合、データの場所を高速に取得できるようになります。 Unique Index については、インデックスの 1 つの種類にすぎません。Unique Index の確立は、この列のデータを繰り返すことができないことを意味します。

以上がMySQLインデックスの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

See all articles