ホームページ データベース mysql チュートリアル mysql インデックスとは何ですか?またその使用方法は何ですか?非常に詳細に整理されている

mysql インデックスとは何ですか?またその使用方法は何ですか?非常に詳細に整理されている

Jul 30, 2018 pm 05:08 PM
mysql mysqlの最適化 mysqlインデックス 索引

MySQL を学習していると、よくインデックスに遭遇します。インデックスとは何ですか?使い方はなんとなく知っていたのですが、説明するのが少し難しかったので、将来聞かれたときのために、空いた時間を利用して本を読んで整理してみました。と書いて、感想を述べましたが、結局のところ、私は数年間これらにさらされてきたので、重要な点について話しましょう。 apache php mysql:

begin!

1. インデックスとは

1. インデックスの概要
インデックスは、実際にはファイルの形式でディスクに保存されるデータ構造です。ディスク I/O 操作が必要です。メインメモリとは異なり、ディスク I/O には機械的な移動コストがかかるため、ディスク I/O の消費時間は膨大になります。

2. IO の概要
IO はコンピューターの入出力を指します。プログラムとランタイム データはメモリ上に存在するため、データが交換される場所は通常ディスクです。ネットワークなどにはIOインターフェースが必要です。人生の例: 覚えておくべき重要なことはすべてノートに書き出す必要があり、記録を読むためにノートにアクセスするたびにそれを読む必要があります。このことを覚えておいてください。直接読み出すことができます。これはキャッシュです(コンピューターに常に保存できるわけではありません)。

2. インデックスアルゴリズム

1. データベースは基本的に B+Tree アルゴリズムを使用して実装されます

2. データベースインデックスはインデックス構造の品質を評価するために使用されます

3. B-Tree
(1) B ツリーの定義は、取得には最大でも h-1 ノードへのアクセスが必要であることを示しています (ルート ノードはメモリ内に存在します)。データベース システムの設計者は、ディスク先読みの原理を巧みに利用し、ノードのサイズを 1 ページに等しくなるように設定しました。これにより、各ノードが完全にロードされるために必要な I/O は 1 つだけになります

(2) B ツリーの実際の実装には、次の手法を使用する必要があります。新しいノードを作成するたびに、ページの領域を直接適用することにより、ノードが物理的にページに格納されるようになります。ページアライメントされているため、ノードは 1 つの I/O のみを必要とします

(3) B ツリー ストレージ構造を使用すると、検索中の I/O の数は通常 3 回を超えないため、B ツリーをインデックス構造は非常に効率的ですが、B ツリー内のノードには大量のキーワード情報を含めることができ、実際の状況に応じて分岐します

4.B+Tree
(1) B ツリーの検索複雑さは O です(h)=O(logdN) なので、ツリーの出次数 d が大きくなるほど、深さ h が小さくなるほど、I/O の数は少なくなります。 B+Tree は、各ノードが 1 ページ サイズであるため、出力次数 d の幅を正確に増やすことができます。そのため、出力次数の上限はノード内のキーとデータのサイズに依存します

(2) B+Tree のノードは削除されたデータであるため、より大きな出力次数を持つことができ、パフォーマンスが向上します

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

(1) 物理的なストレージ順序クラスター化インデックス内のデータの数は同じです。 インデックスの順序は一貫しています。つまり、インデックスが隣接している限り、対応するデータもディスク上で隣接して格納される必要があります。クラスター化インデックスのクエリ効率は、非クラスター化インデックスよりもはるかに高くなります

(3) テーブル内のレコードは 1 つの物理的順序でのみ保存できるため、各テーブルはクラスター化インデックスを 1 つだけ持つことができます

(4) Innodb のデフォルト インデックス

2 . ノンクラスタード索引

(1) ノンクラスタード索引、本の付録に似ていますが、専門用語はどの章に表示されますか? これらの専門用語は順番に並んでいますが、出現する位置が順番に並んでいません。ただし、テーブルには複数の非クラスター化インデックスを含めることができます

(2) 実装原則は、参照行の主キーを格納するためにリーフ ノードを使用することです (クラスター化インデックスとも言えます)

(3) クラスター化インデックスは非クラスター化インデックスの一種、つまりプライマリ + セカンダリ インデックスのインデックス作成方法です。このプライマリ + セカンダリ インデックスの利点は、データ行の移動やページの分割時に補助インデックス ツリーが必要ないことです。補助インデックス ツリーには、データの特定の物理アドレスではなく、プライマリ インデックスの主キー キーワードが格納されるため、更新する必要があります

(4) したがって、非クラスター化インデックスはインデックスに 2 回アクセスする必要があります

4。 . インデックスの種類

1.UNIQUE(ユニークインデックス):同じ値は出現できません、はい、NULL値があります

2.INDEX(通常のインデックス):同じインデックス内容が許可されます

3.PROMARY KEY(プライマリキー)キーインデックス): 同じ値は許可されません

4.FULLTEXT INDEX (全文インデックス): 内の特定の値をターゲットにできますが、効率は非常に悪いです

5. 結合インデックス: 基本的に複数のフィールドが構築されます。 1 つのインデックスにまとめられ、列値の組み合わせは一意である必要があります

5. インデックス作成スキル

1. インデックスには NULL 値が含まれません

(1) 列に NULL 値が含まれている限り、インデックスは作成されます。複合インデックス内の 1 つの列に NULL 値が含まれている限り、この列はこの一致するインデックスに対して無効になります

2. 可能であれば、短いインデックス

(1) を使用します。プレフィックスの長さを指定する必要があります。たとえば、char(255) の列がある場合、ほとんどの値が最初の 10 文字または 20 文字内で一意である場合は、列全体にインデックスを付けないでください。短いインデックスはクエリ速度を向上させるだけでなく、ディスク容量と I/O 操作を節約します

3.

(1) MySQL クエリはインデックスを 1 つだけ使用するため、インデックスが where 句で使用されている場合、order by の列はインデックスを使用しません。したがって、データベースのデフォルトの並べ替えが要件を満たす場合は、並べ替え操作を使用しないでください。必要に応じて、これらの列に対して複合インデックスを構築することをお勧めします

4. (1) 同様の操作を使用することは原則として推奨しません。使用する必要がある場合は、正しい使用方法に注意してください。 「%aaa%」はインデックスを使用しませんが、「aaa%」はインデックスを使用できます

5. NOT IN、<>、! は使用しないでください。 = 操作ですが、<,<=, =,>,>=,BETWEEN,IN はインデックスを使用できます

7。インデックスは、選択操作が頻繁に実行されるフィールドに確立する必要があります

(1)。これらの列がほとんど使用されない場合、インデックスの有無によってクエリ速度が大きく変わることはないためです。逆に、インデックスの追加により、システムのメンテナンス速度が低下し、必要なスペースが増加します

8. インデックスは、比較的ユニークな値を持つフィールドに確立する必要があります

9。およびビット データ型 列にはインデックスを付けないでください。これらの列のデータ量が非常に多いか、値が非常に少ないためです

10. where と join に表示される列にはインデックスを付ける必要があります

11. where 列のクエリ条件に不等号があります。 != ...), mysql インデックスは使用できません

12. where句のクエリ条件に関数が使用されている場合(where DAY (column) =...など)、mysqlインデックスを使用することはできません

13. 結合操作 (データを抽出するときに複数のデータテーブルからのデータが必要) では、mysql は主キーと外部キーのデータ型が同じ場合にのみインデックスを使用できます。それ以外の場合は、時間内に確立された場合、インデックスは使用されません

14.explain は、開発者が SQL の問題を分析するのに役立ちます。explain は、mysql がインデックスをどのように使用するかを示します。選択ステートメントと接続テーブルを処理するために、より適切なインデックスを選択し、より最適化されたクエリを作成するのに役立ちます。ステートメント

6. インデックスとロック

1. ロックがインデックスを使用する場合、それは行ロックであり、インデックスが使用されない場合、それは行ロックであるため、操作されるデータは次のようになります。ロックを使用する(1) インデックスが作成されていない場合、データの選択または配置はテーブル全体のスキャンによって実行され、テーブル ロックが形成されます。インデックスがある場合は、指定された行 (つまり、行ロック。データの更新時にインデックスが使用されない場合、テーブル全体がスキャンされることに注意してください

end

このコンテンツのほとんどは、私がいくつかの情報を蓄積したものです。ネットや本で調べてもわかりにくいのでご容赦ください! 関連記事:

mysqlインデックス名の使い方と使用する場合

インデックスとは何ですか?現在、Mysql にはいくつかの主要なインデックス タイプがあります

関連ビデオ:

インデックスの簡単な紹介 - 6 日間で MySQL を理解するためのビデオ チュートリアル

以上が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)

MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? Apr 09, 2025 am 12:05 AM

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICATでデータベースパスワードを取得できますか? NAVICATでデータベースパスワードを取得できますか? Apr 08, 2025 pm 09:51 PM

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQLでテーブルをコピーする方法 MySQLでテーブルをコピーする方法 Apr 08, 2025 pm 07:24 PM

MySQLでテーブルをコピーするには、新しいテーブルの作成、データの挿入、外部キーの設定、インデックスのコピー、トリガー、ストアドプロシージャ、および機能が必要です。特定の手順には、同じ構造を持つ新しいテーブルの作成が含まれます。元のテーブルからデータを新しいテーブルに挿入します。同じ外部キーの制約を設定します(元のテーブルに1つがある場合)。同じインデックスを作成します。同じトリガーを作成します(元のテーブルに1つがある場合)。同じストアドプロシージャまたは関数を作成します(元のテーブルが使用されている場合)。

MariadBのNAVICATでデータベースパスワードを表示する方法は? MariadBのNAVICATでデータベースパスワードを表示する方法は? Apr 08, 2025 pm 09:18 PM

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

mysqlを表示する方法 mysqlを表示する方法 Apr 08, 2025 pm 07:21 PM

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。

NAVICATでSQLを実行する方法 NAVICATでSQLを実行する方法 Apr 08, 2025 pm 11:42 PM

NAVICATでSQLを実行する手順:データベースに接続します。 SQLエディターウィンドウを作成します。 SQLクエリまたはスクリプトを書きます。 [実行]ボタンをクリックして、クエリまたはスクリプトを実行します。結果を表示します(クエリが実行された場合)。

See all articles