1. はじめに:
私たちの生活の中で、駅で見る電車の時刻表や辞書ディレクトリなど、インデックス効果を確認できるアプリケーションをエクスポートします。それらの機能はインデックスの機能であり、取得するデータの範囲を継続的に絞り込むことで最終的に望ましい結果をフィルタリングし、同時にランダムなイベントを連続したイベントに変換します。つまり、常に同じ検索方法を使用して、データをロックします (辞書の A-Z 検索)。
人生の例 - 電車に乗る: 電車に乗って故郷に帰ります。電車に乗りたいときに電車の時刻表がなかったら、最悪の結果は、すべての電車の停留所に行かなければならないことです。乗りたい電車があるのに、時刻表があると行きたい電車がどこに止まるのかがすぐに分かり、行きたい電車をいちいち確認する必要がなく、すぐにそこに行くことができるのでスピードアップします。訪問。この列車時刻表はデータベースのインデックスです。
2. ディスク原理:
この部分は文章理論が多く、読むだけで頭が痛くなります。興味があれば読んでください。この部分の結論を 1 つ覚えておいてください:
可能な限りデータを読み取る [オペレーティング システムとの I/O 対話の数を減らす]。
興味がない場合は、スキップして次のパートに進んでください。
データベースの実装は比較的複雑であり、パフォーマンスを向上させるために、毎回データの一部をメモリに読み込むことができます。メモリへのアクセスの 100,000 倍であるため、検索ツリーは複雑なアプリケーション シナリオに対応することが困難です。ディスクへのアクセスについては前述したので、ここではディスク IO と事前読み取りについて簡単に説明します。データの読み取りにかかる時間は、シーク時間、回転遅延の 3 つのカテゴリに分類されます。 、および送信時間、
a) · シーク時間: 磁気アームが指定されたトラックに移動するのに必要な時間、主流のディスクは通常 5 ミリ秒未満です。 b) 回転遅延: よく聞くディスク速度です。 7200 rpm のディスクなど、1 分間に 7200 回回転できることを意味します。つまり、回転遅延は 1/120/2 = 4.17 ミリ秒になります。ディスクからのデータの読み取りまたはディスクへのデータの書き込みにかかる時間は、通常は 10 分の 1 ミリ秒以内で、最初の 2 回に比べて無視できます。
(非常に詳細な記事を読みました: http://wdxtub.com/2016/04/16/thin-csapp-3/)
すると、ディスクにアクセスする時間、つまりディスク IO の時間は5 + 4.17 = 約 9 ミリ秒に相当します。これはかなり良いように思えますが、命令は自然などの電気に依存するため、500 MIPS (1 秒あたりの命令数) のマシンは 1 秒あたり 5 億命令を実行できることを知っておく必要があります。つまり、1 つの IO を実行するには 400,000 の命令が必要であり、そのたびに 9 ミリ秒かかるのは明らかに大惨事です。
結論としては、オペレーティング システムの I/O インタラクションの数を減らします。
(毎回 IO によって読み取られるデータをページと呼びます。ページ上のデータの具体的なサイズはオペレーティング システムによって異なりますが、通常は 4k または 8k です。つまり、ページ内のデータを読み取るとき、実際のデータは 1 つだけです前回は IO が発生しました)
3. インデックスとは:
データベース システムを使用する過程で、データ クエリは最も頻繁に使用されるデータ操作です。
最も基本的なクエリ アルゴリズムは、もちろん、テーブルを走査し、行の値が検索するキーワードと等しいかどうかを行ごとに照合します。その時間計算量は O(n) です。ただし、時間計算量が O(n) のアルゴリズムは、小さなテーブルや負荷の軽いデータベースでも良好なパフォーマンスを達成できます。しかし、データが増加すると、時間計算量が O(n) のアルゴリズムは明らかに悪く、パフォーマンスは急速に低下します。
幸いなことに、コンピューターサイエンスの発展により、二分探索や二分探索など、より優れた検索アルゴリズムが数多く提供されました。 木探索)など少し分析すると、各検索アルゴリズムは特定のデータ構造にのみ適用できることがわかります。たとえば、二分探索では取得したデータを順序付けする必要がありますが、二分木検索では二分探索木にのみ適用できます。データ自体 組織構造はさまざまなデータ構造を完全に満たすことはできません (たとえば、両方の列を同時に順番に整理することは理論的に不可能です)。そのため、データベース システムはデータに加えて、特定の検索を満たすデータ構造も維持します。アルゴリズム。構造は何らかの方法でデータを参照 (ポイント) し、これらのデータ構造に高度な検索アルゴリズムを実装できます。このデータ構造がインデックスです。
4. MySQL の B-Tree インデックス (技術的には B+Tree)
さて、ここからがこの記事の核心です。
MySQL には、B ツリー インデックス、ハッシュ インデックス、フルテキスト インデックス、R ツリー インデックスという 4 つの主なタイプのインデックスがあります。主にB-Treeインデックスを分析します。 (B: バランスとはバイナリツリーではなくバランスを意味します)
1. b+ ツリーのデータ構造の詳細な説明
上の図は b+tree です (innodb エンジンの下では、myisam エンジンの下の B+ 構造とは異なります。端的に言えば、クラスター化インデックスと非クラスター化インデックスの違いです。詳細については、を参照してください) :
Mysql-cluster クラスター インデックス
水色のブロックはディスク ブロックと呼ばれ、各ディスク ブロックには複数のデータ項目 (濃い青で表示、範囲: [(M/2)-1, M-) が含まれていることがわかります。たとえば、ディスク ブロック 1 にはデータ項目 17 と 35 が含まれ、P1 は 17 未満のディスク ブロックを表し、P2 はデータ項目を表します。 17 ~ 35 のディスク。ブロック、P3 は 35 より大きいディスク ブロックを表します。実際のデータはリーフ ノード、つまり 3、5、9、10、13、15、28、29、36、60、75、79、90 に存在します。 , 99 のみ。実際のデータ (B+ の特徴) は保存されません。たとえば、17 と 35 は実際にはデータ テーブルに存在しません。 B+ ツリー
の検索プロセスは、図に示すように、データ項目 29 を検索する場合、まずディスク ブロック 1 をディスクからメモリにロードします。このとき、IO が発生します。メモリ内でバイナリ検索を実行し、29 が 17 ~ 35 の間にあることを確認し、ディスク ブロック 1 の P2 ポインタをロックします。ディスク ブロック 3 がロードされるのと比較して非常に短いため、メモリ時間は無視できます。ディスク ブロック 1 の P2 ポインタのディスク アドレスを介してディスクをメモリにロードします。2 番目の IO が発生し、29 は 26 と 30 の間にあり、ディスク ブロック 3 の P2 ポインタをロックし、ポインタを介してディスク ブロック 8 をメモリにロードします。同時に、3 番目の IO がメモリ内で実行され、29 が見つかり、クエリは終了します。実際には、b+ ツリーは数百万のデータを表す可能性があります。数百万回のデータ検索に必要な IO は 3 回だけですが、インデックスがない場合、各データ項目に 1 回の IO が必要になるため、合計 100 万回の IO が必要となり、明らかにコストが高くなります。 、非常に高いです
左の構造であれば I/O 回数は 3 回、右の線形テーブルであれば I/O 回数は 6 回であることがわかります。より多くの IO があること
結論: 1. インデックスとして設定するフィールド len は小さくする必要があります2. ジョイント インデックスを実行する場合、ジョイント フィールドの数も小さくする必要があります。
2 つの結論をマップします。
1. 左端の一致する特徴、結合インデックスは左から右に読み取られます
2. 複数列のインデックスがある場合、左からインデックスを作成する必要はありません。右へ (a,b,c) したがって、(a)、(a,b) を確立する必要はありません
3. さらなる結論: Mysql-index の概要 http://blog.csdn.net/ty_hf/article/details/53526405
上記は Mysql-index データ構造の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) を参照してください。 )!

MySQLインデックスのカーディナリティは、クエリパフォーマンスに大きな影響を及ぼします。1。高いカーディナリティインデックスは、データ範囲をより効果的に狭め、クエリ効率を向上させることができます。 2。低カーディナリティインデックスは、完全なテーブルスキャンにつながり、クエリのパフォーマンスを削減する可能性があります。 3。ジョイントインデックスでは、クエリを最適化するために、高いカーディナリティシーケンスを前に配置する必要があります。

MySQL学習パスには、基本的な知識、コアの概念、使用例、最適化手法が含まれます。 1)テーブル、行、列、SQLクエリなどの基本概念を理解します。 2)MySQLの定義、作業原則、および利点を学びます。 3)インデックスやストアドプロシージャなどの基本的なCRUD操作と高度な使用法をマスターします。 4)インデックスの合理的な使用や最適化クエリなど、一般的なエラーのデバッグとパフォーマンス最適化の提案に精通しています。これらの手順を通じて、MySQLの使用と最適化を完全に把握できます。

MySQLの実際のアプリケーションには、基本的なデータベース設計と複雑なクエリの最適化が含まれます。 1)基本的な使用法:ユーザー情報の挿入、クエリ、更新、削除など、ユーザーデータの保存と管理に使用されます。 2)高度な使用法:eコマースプラットフォームの注文や在庫管理など、複雑なビジネスロジックを処理します。 3)パフォーマンスの最適化:インデックス、パーティションテーブル、クエリキャッシュを使用して合理的にパフォーマンスを向上させます。

MySQLのSQLコマンドは、DDL、DML、DQL、DCLなどのカテゴリに分割でき、データベースとテーブルの作成、変更、削除、データの挿入、更新、削除、複雑なクエリ操作の実行に使用できます。 1.基本的な使用には、作成可能な作成テーブル、INSERTINTO INSERTデータ、クエリデータの選択が含まれます。 2。高度な使用法には、テーブル結合、サブQueries、およびデータ集約のためのグループに参加します。 3.構文エラー、データ型の不一致、許可の問題などの一般的なエラーは、構文チェック、データ型変換、許可管理を介してデバッグできます。 4.パフォーマンス最適化の提案には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、およびデータの一貫性を確保するためのトランザクションの使用が含まれます。

INNODBは、ロックメカニズムとMVCCを通じて、非論的、一貫性、および分離を通じて原子性を達成し、レッドログを介した持続性を達成します。 1)原子性:Undologを使用して元のデータを記録して、トランザクションをロールバックできることを確認します。 2)一貫性:行レベルのロックとMVCCを介してデータの一貫性を確保します。 3)分離:複数の分離レベルをサポートし、デフォルトでrepeatable -readが使用されます。 4)持続性:Redologを使用して修正を記録し、データが長時間保存されるようにします。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLは、中小企業に適しています。 1)中小企業は、顧客情報の保存など、基本的なデータ管理にMySQLを使用できます。 2)大企業はMySQLを使用して、大規模なデータと複雑なビジネスロジックを処理して、クエリのパフォーマンスとトランザクション処理を最適化できます。

INNODBは、次のキーロックメカニズムを通じてファントムの読み取りを効果的に防止します。 1)Next-KeyLockingは、Row LockとGap Lockを組み合わせてレコードとギャップをロックして、新しいレコードが挿入されないようにします。 2)実際のアプリケーションでは、クエリを最適化して分離レベルを調整することにより、ロック競争を削減し、並行性パフォーマンスを改善できます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
