MySQLの最適化() - MySQLのストレージエンジン

参考記事:

https://mp.weixin.qq.com/s?__biz=MzI4Mzc5NDk4MA==&mid=2247486569&idx=2&sn=97110c3d1b682c8dbb5f4e265ba715a3&chksm=eb840722dcf38e343fe8d48ad491a39d0d8015425c743fcf2febf98d577f47b4a7f23559d5a3&scene=0&xtrack=1#rd
================ ==========================
https://www.cnblogs.com/aikutao/p/11207365.html
https://baijiahao.baidu ?.COM / sのID = 1629308672995568286& WFR =クモ&= PCのための
ロックします。https://www.cnblogs.com/zyy1688/p/9924048.html

データベースエンジン

  1. 説明:作成するデータベース・エンジンを使用して、データベースエンジンは、基礎となるデータベースソフトウェア組織で、データベース管理システム(DBMS)、照会、更新、削除データ、異なるストレージエンジンは、異なるストレージメカニズム、割り出し技術、ロックレベルおよび他の機能、別の用途を提供ストレージエンジン、あなたはまた、特定の関数を得ることができます。

シンプルなストレージエンジンの違い

ここに画像を挿入説明

ここに画像を挿入説明

  1. InnoDBは、エンジンの両方で使用MylSAMデータ構造はB +ツリーインデックスであり、その差はあります。
  1. B +ツリーに格納されているInnorDbコンテンツデータ構造は、実際のデータ、インデックスのアドレスであり、それは実際のデータから分離され、実際のデータにインデックス指示を使用して、そのようなインデックスパターンは、非クラスタ化インデックスです。
    B +ツリーに格納されている2.MyISAMデータ構造は、このインデックスは、クラスタード・インデックスと呼ばれ、実際のデータです。

インデックスカテゴリ:

  1. 唯一のインデックス:ユニークインデックスが同じインデックス値を許可していません
  2. 主キーのインデックス:ユニークインデックスが自動的に主キーのインデックスを作成するプライマリキーテーブルを定義するために、特殊なタイプです。各主キーの値に必要なプライマリキーインデックスがユニークで、かつnullにすることはできません。
  3. クラスタ化インデックス(クラスタ化された)同じテーブルの各行のキー値(インデックス)ための論理 - 物理ため、各テーブルは一つだけを有することができます。
  4. 非クラスタ化インデックスが(非クラスタ):論理順序非クラスタ化インデックステーブルが指定され、データは別の場所に格納され、インデックスは、データ記憶場所へのポインタを含む、より少ない249以上、より存在し得る位置インデックスに格納されます。

A、InnoDBの

  1. 説明:これは、MySQL 5.5またはデフォルトのストレージエンジンの新しいバージョンです。これは、トランザクションセーフ(ACID準拠)テーブル、外部キーのサポート参照整合性制約を提供します。これは、保護データへの提出、ロールバックや緊急時の回復をサポートしていますまた、行レベルのロックをサポートします。マルチユーザー環境で使用する場合、それのパフォーマンスを向上させる「一貫非ロック読み取り」。これは、それによってクエリベースのI / Oの主キーを低減、クラスタインデックスデータに格納されます。

InnoDBデータベースをインデックスとして使用しているため、主キーのキー、InnoDBのテーブルようにメインのインデックスファイル自体、およびデータファイルため必要InnoDBの凝集体がマスターキーに基づいていること、したがって、InnoDBエンジンを使用して、テーブルデータとして主キーを必要とします明示的に指定されていない場合、MySQLは自動的に主キーとして挙げることができる選択しようとし、見つからなかった場合、それは暗黙的に生成される一意の主キー、6バイトのフィールド長、長整数型のデータ・フィールドを識別する。

ここに画像を挿入説明
二、MyISAMテーブル

  1. 特長:非トランザクションストレージエンジンの管理テーブル、提供高速保存と検索、全文検索、テーブルロックのサポート、インデックスは、アドレスのみのデータレコードを保存します。
    ここに画像を挿入説明
    三、MEMORY

これは、以前は、ヒープと呼ばれ、メモリ内のテーブルを提供します。それはディスク上に格納されたデータよりも高速なアクセスのためのRAMのすべてのデータおよび他の参考文献は、すぐに同じデータを検索するために使用します。

四、MERGE

同様のMyISAMテーブルの複数は、デフォルトでテーブルを含む非トランザクションテーブルを扱うことができるテーブルにグループ化。

五、実施例

あなたは、テーブルを作成するには、このエンジンを使用することができますが、データを保存したり、取得することはできません。目的は、どのように新しいストレージエンジンを書き、開発者を教えることです。

六、ARCHIVE

大量のデータを格納するために、それはインデックスをサポートしていません。

七、CSV

コンマを格納するためのテキストファイル形式で値データを分離しました。

八、BLACKHOLE

データで保存されますが、常に空返されます。

九、FEDERATED

リモート・データベースに格納されたデータ。

ロック

  1. MySQLのテーブルレベルロックのロックモード(MyISAMテーブル
    共有ロックテーブル(表リードロック)と排他的な書き込みロック表(テーブル書き込みロック):MySQLのテーブルレベルのロックは、2つのモードがあります。
  • 読み取り操作のためのMyISAMは、他のユーザーが同じテーブルを要求ブロックしませんが、同じテーブルを書き込む要求をブロックします。
  • MyISAMテーブルのための書き込み、および同じテーブル読み出しおよび書き込み操作に他のユーザをブロックします。
  • 読み出しおよび書き込み動作MyISAMテーブルとの間、並びに書き込み動作の間に直列です。
    スレッドがテーブルの上に書き込みロックを取得すると、ロックを保持しているスレッドだけがテーブルの上に操作を更新することができます。他のスレッドは読んでロックが解除されるまで、書き込み操作が待機します。
  1. innor共有ロックと排他ロック
    我々は良く理解しても共有ロックのためには、複数のトランザクションがデータのみがデータを変更することはできません読み取ることができるということですみんなの理解のための排他ロックはいくつかの違いかもしれませんした後、私はちょうど排他ロックは、データの行をロックすること、ミスを犯していたが、他のトランザクションは、実際には、ないケースを読み、データラインを変更することはできません。排他ロックは、データプラス排他ロックの後の行に取引を指し、他のトランザクションは、その上に別のロックを追加することはできません。排他ロックの割合は、選択...更新ステートメントのため、プラス共有を使用することができます場合、MySQL InnoDBエンジンのデフォルトは、データ・ステートメント、更新を修正、削除、プラス排他ロックに関連するデータを自動的に挿入し、select文のデフォルトは、ロックのいずれかのタイプを追加しませんあなたが選択...共有モードステートメントでロックを使用することができますロック。、したがって、増加は、トランザクションデータの他のタイプへのデータの、あまりにも排他ロック列は、クエリデータへの道をロック共有モードでも更新し、ロックのためにより、変更することはできませんが、直接選択することができます...から...クエリデータを共通のクエリメカニズムのロックが存在しないので

  2. InnoDBの行ロック実装
    のInnoDB行ロックが達成されるデータに対応するデータ線によってロックされているMySQLとオラクル、異なるインデックスにインデックス・エントリによって達成されます。この特徴的な手段を達成するためのInnoDB行ロック:インデックスのみの条件を介してデータを取得し、InnoDBはInnoDBのテーブルロックを使用することになり、それ以外の場合は、行レベルのロックを使用します!
    実用的なアプリケーションでは、そうでない場合は、このように同時パフォーマンスに影響を与え、ロックの競合が多数になることがあり、この機能のInnoDB行ロックに特別な注意を払います。

  3. デッドロック
    MyISAMテーブルロックがデッドロック自由であるMyISAMテーブルがありませんので、デッドロックが存在しない、常に時間を満たすために必要なすべてのロックへのアクセスのいずれかのすべて、または待機であるので、これはです。しかし、InnoDB内で、ロックからなる単一のSQLトランザクションに加えて、徐々にのInnoDBデッドロックが可能であると判断され、得られます。
    デッドロックが発生した後、InnoDBは一般には、自動的にロックを取得するために、別のトランザクションをロックし、リターンを解放するために、トランザクションを検出して作ることができ、トランザクションを完了し続けます。しかし、InnoDBは完全に自動的にデッドロックを検出しない==、外部のロック、ロック、または関与の文脈では、必要がinnodb_lock_wait_timeoutを待つことにタイムアウトパラメータは、ロックを設定することで解決しました。==原因不能に多数のトランザクションが必要なロックを取得する場合は、比較的高いこのパラメータは唯一の同時アクセスで解決デッドロックに使用されていないことにされて指摘し、すぐに中断する必要があり、その結果、コンピュータリソースの多くを取るだろう深刻なパフォーマンスの問題、さらには、データベースの崩壊を引き起こしました。私たちは起きてからこれを避けるために適切なロックを設定することにより、タイムアウトしきい値を待ちます。

公開された36元の記事 ウォン称賛11 ビュー10000 +

おすすめ

転載: blog.csdn.net/s_xchenzejian/article/details/104556750