ホームページ データベース mysql チュートリアル mysqlストレージエンジン - InnoDBの超詳細解説

mysqlストレージエンジン - InnoDBの超詳細解説

Aug 27, 2019 pm 03:15 PM
innodb

デフォルトでデータベースで使用されるストレージ エンジンを確認したい場合は、コマンド

SHOW VARIABLES LIKE 'storage_engine';
ログイン後にコピー

1. InnoDB storage Engine

1# を使用できます。 ##. InnoDB はトランザクション データベースに推奨されるエンジンです

トランザクション セキュリティ テーブル (ACID) をサポートします

トランザクションの ACID 属性: アトミック性、一貫性、分離性、耐久性

a.

原子性: 原子性とは、この一連のステートメントがすべて実行されるか、またはまったく実行されないことを意味します。トランザクションの実行途中でエラーが発生した場合、データベースはその場所にロールバックされます。トランザクションが開始された場所。

実装: 主に、MySQ ログ システムのやり直しおよび元に戻すメカニズムに基づいています。トランザクションは、選択、クエリ、削除などの機能を持つ一連の SQL ステートメントです。ステートメントの実行ごとに 1 つのノードが存在します。たとえば、delete ステートメントが実行された後、トランザクションにレコードが保存され、このレコードには、いつ、何をしたかが保存されます。何か問題が発生した場合は、元の位置にロールバックされ、実行した内容は Redo に保存され、逆に実行できます。

b.

一貫性: トランザクションの開始および終了の前後で、データベースの整合性制約に違反しません。 (例:例えば、A が B に送金した場合、A がそのお金を差し引くが B が受け取らないということは不可能です。)

c.

Isolation: 同時に、 1 つのトランザクションは同じデータを要求できます。異なるトランザクションは互いに干渉しません。

分離が考慮されていない場合、いくつかの問題が発生します:

i.

ダーティ リード: トランザクションでの読み取りを指します。処理中にコミットされていない別のトランザクションのデータが読み取られます (トランザクションが特定のデータを複数回変更しており、このトランザクション内の複数の変更がまだコミットされていない場合、同時トランザクションがアクセスするようになります)このデータにより、2 つのトランザクションによって取得されたデータが不整合になります); (別のトランザクションのコミットされていないダーティ データを読み取ります)

ii.

Non-repeatable read: データベース内で確実にデータの場合、トランザクション範囲内の複数のクエリが異なるデータ値を返しました。これは、クエリ間隔中に別のトランザクションによって変更および送信されたためです (前のトランザクションによって送信されたデータが読み取られ、クエリされたデータはすべて同じデータでした) item)

iii,

仮想読み取り (ファントム読み取り) : トランザクションが独立して実行されていない場合に発生する現象です (例: トランザクション T1 がテーブル内のすべての行を読み取ります)。 「1」から「2」に変更されました。このとき、トランザクション T2 はテーブルにデータ項目の行を挿入しましたが、このデータ項目の値はまだ「1」のままで、データベースに送信されました。ユーザーがトランザクション T1 を操作した場合、変更されたばかりのデータを見ると、まだ変更されていない行が 1 つあることがわかります。実際、この行は、まるで幻覚を見ているかのように、トランザクション T2 から追加されたものです); (前のトランザクションによって送信されたデータが読み取られます) . 、全体としてのデータのバッチの場合)

d.

Persistence: トランザクションが完了すると、トランザクションによるデータベースへのすべての更新はデータベースに保存され、保存することはできません。ロールバック

#2

.InnoDB は mySQL のデフォルトのストレージ エンジンです#デフォルトの分離レベルは RR であり、RR のさらに 1 つ下のレベルです分離レベルでは、マルチバージョン同時実行制御 (MVCC) によって反復不能読み取りの問題が解決され、ギャップ ロック (つまり同時実行制御) が追加されてファントム読み取りの問題が解決されます。したがって、InnoDB の RR 分離レベルは、より優れた同時実行パフォーマンスを維持しながら、実際にはシリアル化レベルの効果を実現します。

MySQL データベースは 4 つの分離レベルを提供します:

a、

Serializable

(シリアル化): ダーティ リード、反復不可能な読み取り、およびファントム リードの発生を回避できます。 ##b, Repeatable read

(反復可能な読み取り): ダーティ リードと非反復読み取りの発生を回避できます;

c, Read commited

( read commit): ダーティ リードの発生を回避できます;

d, Read uncommitted

(read uncommitted): 最低レベル、いかなる状況下でも保証できません;

----d 分離レベルは高から低まであり、レベルが高くなるほど実行効率は低くなります。

3.InnoDB は行レベルのロックをサポートします

行レベルのロックは同時実行性を最大限にサポートできます。行レベルのロックはストレージ エンジン層によって実装されます。

ロック: ロックの主な機能は、共有リソースへの同時アクセスを管理し、トランザクション分離を実現することです。

タイプ: 共有ロック (読み取りロック)、排他的ロック (書き込みロック)

MySQL ロックの強度: テーブル レベルのロック (オーバーヘッドが低く、同時実行性が低い)、通常はサーバー層で実装されます

行レベルのロック (オーバーヘッドが高く、同時実行性が高い)、ストレージでのみ実装されますエンジン レベルの実装

4. InnoDB は、大量のデータを処理するための最大のパフォーマンス

を実現するように設計されています。

その CPU 効率は、どのディスクベースのリレーショナル データベース エンジンにも匹敵しない可能性があります

5. InnoDB ストレージ エンジンは、MySQL サーバーと完全に統合されています

# InnoDB ストレージ エンジンは、データとインデックスをメイン メモリにキャッシュするための独自のバッファ プールを維持します。 InnoDB はテーブルとインデックスを論理テーブル スペースに配置し、テーブル スペースには複数のファイル (または元のディスク ファイル) を含めることができます。

6

InnoDB は完全な外部キーをサポートします。拘束######

テーブルにデータを格納する場合、各テーブルは主キーの順に格納されますが、テーブル定義に主キーが表示されていない場合は主キーを指定してください。 InnoDB は行ごとに 6 バイトの ROWID を生成し、それを主キーとして使用します

#7. InnoDB は、高いパフォーマンスを必要とする多くの大規模データベース サイトで使用されています

#8. テーブル内の行数は InnoDB に保存されません

(例: テーブルから count(*) を選択するとき、InnoDB はテーブル全体をスキャンして行数を計算する必要があります); クリアするときテーブル全体、InnoDB は 1 行 1 行の削除は非常に遅い; InnoDB はディレクトリを作成しません InnoDB を使用すると、MySQL は ibdata1 という名前の 10MB の自動拡張データ ファイルを作成し、ib_logfile0 という名前のデータ ファイルを 2 つ作成します。 MySQL データ ディレクトリと ib_logfile1

2 の 5MB ログ ファイル InnoDB エンジンの基盤となる実装

InnoDB には 2 つのストレージ ファイルがあり、サフィックス名は です。 frm と .idb. ; このうち、.frm はテーブルの定義ファイル、.idb はテーブルのデータファイルです。

1. InnoDB エンジンはインデックス構造として B ツリー構造を使用します

B-Tree (バランス型マルチパス検索ツリー): ディスクなどの外部ストレージ デバイス用に設計されたバランス型検索ツリー

システムがディスクからメモリにデータを読み取るときの基本単位はディスク ブロックであり、同じディスク ブロックにあるデータはオンデマンドではなく一度に読み出されます。

InnoDB ストレージ エンジンは、データ読み取り単位としてページを使用します。ページは、ディスク管理の最小単位です。デフォルトのページ サイズは 16k です。

システム内のディスク ブロックのストレージ スペースは、多くの場合、そのため、InnoDB がディスク領域を申請するたびに、ページ サイズが 16 KB に達するまで、アドレスを持つ複数の連続したディスク ブロックが使用されます。

InnoDB は、ディスク データをディスクに読み取るときに基本単位としてページを使用します。データをクエリするときに、ページ内の各データがデータ レコードの場所を特定するのに役立つ場合、これにより、ページの数が削減されます。ディスク I/O によりクエリ効率が向上します。

B ツリー構造内のデータにより、システムはデータが配置されているディスク ブロックを効率的に見つけることができます。

B ツリー内の各ノードには大量のキーワード情報を含めることができます。例

mysqlストレージエンジン - InnoDBの超詳細解説各ノードはディスク領域の 1 つのディスク ブロックを占有します。ノードには 2 つの昇順キーとルートへの 3 つのポインタがあります。ポインタ 格納されるのは、子ノードが配置されているディスク ブロックのアドレスです。

ルート ノードを例にとります。キーワードは 17 と 35 です。P1 ポインタが指すサブツリーのデータ範囲は 17 未満です。P2 ポインタが指すサブツリーのデータ範囲は 17 です。 ----35. P3 ポインターのデータ範囲は 17----35. ポイントされたサブツリーのデータ範囲は 35 より大きい;

キーワード 29 の検索プロセスをシミュレートします:

a. ルート ノードに従ってディスク ブロック 1 を見つけ、メモリに読み取ります。 [初めてのディスク I/O 操作]

b. 区間 (17,35) のキーワード 29 を比較し、ディスク ブロック 1 のポインタ P2 を見つけます;

c. それを見つけますP2 ポインタ ディスク ブロック 3 に基づいて、メモリに読み込まれます。 [2 回目のディスク I/O 操作]

d. 区間 (26, 30) のキーワード 29 を比較し、ディスク ブロック 3 のポインタ P2 を見つけます;

e. ベースの検索P2 ポインタのディスク ブロック 8、メモリに読み込まれます。 [3 番目のディスク I/O 操作]

f. ディスク ブロック 8 のキーワード リストでキーワード 29 を検索します。

MySQL の InnoDB ストレージ エンジンはルートを使用するように設計されています。ノードは次の場所に存在します。したがって、ツリーの深さは 3 を超えてはなりません。つまり、I/O は 3 回を超える必要はありません。

上記の結果を分析すると、3 回のディスク I/O 操作と 3 回の I/O 操作が行われることがわかります。メモリサーチが動作する必要があります。メモリ内のキーワードは順序付きリスト構造であるため、バイナリ検索を使用して効率を向上させることができます。3 つのディスク I/O 操作が B ツリー全体の検索効率に影響を与える決定的な要因となります。

B ツリー

B ツリーは B ツリーに基づいて最適化されており、外部ストレージ インデックス構造の実装により適しています。各 B ツリーにはキーとデータはノードに格納されており、各ページの格納スペースには限りがあるため、データ データが大きい場合、各ノード (つまり 1 ページ) に格納できるキーの数は非常に少なくなります。保存されるデータの量が多い場合、B ツリーの深さも大きくなり、クエリ中のディスク I/O の数が増加し、クエリの効率に影響します。

B ツリーでは、すべてのデータ レコード ノードがキー値の順に同じ階層のリーフ ノードに保存され、キー値の情報のみが非リーフ ノードに保存されるため、各ノードの記憶容量が大幅に増加します。キー値の数により B ツリーの高さが減ります;

mysqlストレージエンジン - InnoDBの超詳細解説 通常、B ツリーには 2 つのヘッド ポインタがあり、1 つはルート ノードを指し、もう 1 つはルート ノードを指します。は最小の key を持つリーフ ノードを指し、すべてのリーフ ノード (つまりデータ ノード) の間にチェーン リング構造があります。

したがって、B Tree では、主キーの範囲検索とページング検索、およびルート ノードから開始するランダム検索の 2 つの検索操作を実行できます。

InnoDB の B ツリー

InnoDB は ID によってインデックス付けされたデータ ストレージです

InnoDB エンジンを使用する 2 つのデータ ストレージ ファイルがあります。1 つは定義ファイル、もう 1 つは定義ファイルです。データドキュメント。

InnoDB は B ツリー構造を通じて ID のインデックスを構築し、レコードをリーフ ノードに保存します

mysqlストレージエンジン - InnoDBの超詳細解説インデックス付きフィールドが主キー ID ではない場合は、フィールドのインデックスを作成し、レコードの主キーをリーフ ノードに格納し、主キー インデックスを通じて対応するレコードを検索します。

その他の関連する質問については、PHP 中国語 Web サイトをご覧ください: PHP ビデオ チュートリアル

以上がmysqlストレージエンジン - InnoDBの超詳細解説の詳細内容です。詳細については、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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 innodbとは何ですか mysql innodbとは何ですか Apr 14, 2023 am 10:19 AM

InnoDB は、MySQL のデータベース エンジンの 1 つです。現在、MySQL のデフォルトのストレージ エンジンであり、MySQL AB によるバイナリ リリースの標準の 1 つです。InnoDB は、二重トラック認証システムを採用しており、1 つは GPL 認証、もう 1 つは独自のソフトウェアです認可。 InnoDB は、トランザクション データベースに推奨されるエンジンであり、トランザクション セキュリティ テーブル (ACID) をサポートしています。InnoDB は、同時実行性を最大限にサポートできる行レベルのロックをサポートしています。行レベルのロックは、ストレージ エンジン層によって実装されます。

MySQL がバイナリ コンテンツから InnoDB 行フォーマットを認識する方法 MySQL がバイナリ コンテンツから InnoDB 行フォーマットを認識する方法 Jun 03, 2023 am 09:55 AM

InnoDB はディスク上のテーブルにデータを保存するストレージ エンジンであるため、シャットダウンして再起動した後でもデータは残ります。データ処理の実際のプロセスはメモリ内で発生するため、ディスク内のデータをメモリにロードする必要があります。書き込みまたは変更要求を処理している場合は、メモリ内の内容もディスクに更新する必要があります。また、ディスクへの読み取りおよび書き込みの速度は非常に遅いことがわかっており、これはメモリ内での読み取りおよび書き込みとは数桁異なります。したがって、テーブルから特定のレコードを取得したい場合、InnoDB ストレージ エンジンは読み取りを行う必要がありますか?ディスクからレコードを 1 つずつ取り出しますか? InnoDB で採用されている方法は、データを複数のページに分割し、ページをディスクとメモリ間の対話の基本単位として使用することです。InnoDB のページのサイズは通常 16 です。

mysql innodb例外を処理する方法 mysql innodb例外を処理する方法 Apr 17, 2023 pm 09:01 PM

1. mysql をロールバックして再インストールします。このデータを他の場所からインポートする手間を避けるために、まず現在のライブラリ (/var/lib/mysql/location) のデータベース ファイルのバックアップを作成します。次に、Perconaserver 5.7 パッケージをアンインストールし、元の 5.1.71 パッケージを再インストールし、mysql サービスを開始すると、Unknown/unsupportedtabletype:innodb というプロンプトが表示され、正常に開始できませんでした。 11050912:04:27InnoDB:バッファプールの初期化中、サイズ=384.0M11050912:04:27InnoDB:完了

MySQL ストレージ エンジンの選択の比較: InnoDB、MyISAM、およびメモリのパフォーマンス インデックスの評価 MySQL ストレージ エンジンの選択の比較: InnoDB、MyISAM、およびメモリのパフォーマンス インデックスの評価 Jul 26, 2023 am 11:25 AM

MySQL ストレージ エンジンの選択の比較: InnoDB、MyISAM、およびメモリのパフォーマンス インデックスの評価 はじめに: MySQL データベースでは、ストレージ エンジンの選択がシステム パフォーマンスとデータの整合性において重要な役割を果たします。 MySQL はさまざまなストレージ エンジンを提供します。最も一般的に使用されるエンジンには、InnoDB、MyISAM、Memory などがあります。この記事では、これら 3 つのストレージ エンジンのパフォーマンス指標を評価し、コード例を通じて比較します。 1. InnoDB エンジン InnoDB は私のものです

MySQL の innoDB でのファントム読み取りを解決する方法 MySQL の innoDB でのファントム読み取りを解決する方法 May 27, 2023 pm 03:34 PM

1. MySQL トランザクション分離レベル これら 4 つの分離レベルでは、複数のトランザクションの同時実行性の競合がある場合、ダーティ リード、非反復読み取り、ファントム読み取りの問題が発生する可能性があり、innoDB は反復可能読み取り分離レベル モードでこれらの問題を解決します。ファントム リーディングの説明、2. ファントム リーディングとは? ファントム リーディングとは、図に示すように、同じトランザクション内で同じ範囲を前後 2 回クエリしたときに得られる結果が矛盾することを意味します。 . この時点では、条件を満たすデータは 1 つだけです。2 番目のトランザクションでは、データの行を挿入して送信します。最初のトランザクションが再度クエリを実行すると、取得される結果は、前のトランザクションの結果より 1 つ多くなります。最初のクエリ。データ。最初のトランザクションの最初と 2 番目のクエリは両方とも同じであることに注意してください

INNODBフルテキスト検索機能を説明します。 INNODBフルテキスト検索機能を説明します。 Apr 02, 2025 pm 06:09 PM

INNODBのフルテキスト検索機能は非常に強力であり、データベースクエリの効率と大量のテキストデータを処理する能力を大幅に改善できます。 1)INNODBは、倒立インデックスを介してフルテキスト検索を実装し、基本的および高度な検索クエリをサポートします。 2)一致を使用してキーワードを使用して、ブールモードとフレーズ検索を検索、サポートします。 3)最適化方法には、単語セグメンテーションテクノロジーの使用、インデックスの定期的な再構築、およびパフォーマンスと精度を改善するためのキャッシュサイズの調整が含まれます。

MyISAM および InnoDB ストレージ エンジンを使用して MySQL のパフォーマンスを最適化する方法 MyISAM および InnoDB ストレージ エンジンを使用して MySQL のパフォーマンスを最適化する方法 May 11, 2023 pm 06:51 PM

MySQL は広く使用されているデータベース管理システムであり、ストレージ エンジンが異なればデータベースのパフォーマンスに与える影響も異なります。 MyISAM と InnoDB は、MySQL で最もよく使用される 2 つのストレージ エンジンですが、これらには異なる特性があり、不適切に使用するとデータベースのパフォーマンスに影響を与える可能性があります。この記事では、これら 2 つのストレージ エンジンを使用して MySQL のパフォーマンスを最適化する方法を紹介します。 1. MyISAM ストレージ エンジン MyISAM は、MySQL で最も一般的に使用されるストレージ エンジンであり、その利点は高速であり、ストレージ スペースが小さいことです。 MyISA

MySQL ストレージ エンジンの読み取りパフォーマンスを向上させるためのヒントと戦略: MyISAM と InnoDB の比較分析 MySQL ストレージ エンジンの読み取りパフォーマンスを向上させるためのヒントと戦略: MyISAM と InnoDB の比較分析 Jul 26, 2023 am 10:01 AM

MySQL ストレージ エンジンの読み取りパフォーマンスを向上させるためのヒントと戦略: MyISAM と InnoDB の比較分析 はじめに: MySQL は、最も一般的に使用されているオープン ソース リレーショナル データベース管理システムの 1 つで、主に大量の構造化データの保存と管理に使用されます。ほとんどのアプリケーションでは読み取り操作が主な操作であるため、アプリケーションではデータベースの読み取りパフォーマンスが非常に重要になることがよくあります。この記事では、MySQL ストレージ エンジンの読み取りパフォーマンスを向上させる方法に焦点を当て、一般的に使用される 2 つのストレージ エンジンである MyISAM と InnoDB の比較分析に焦点を当てます。

See all articles