MySQLのエンジン[ターン]

データベースエンジンが導入されました
MySQLのMySQLのデータベースエンジンは、インストールがコンパイルされている方法によって異なります。新しいエンジンを追加するには、MySQLを再コンパイルする必要があります。ISAM、MYISAMとHEAP:デフォルトでは、MySQLは3つのエンジンをサポートしています。そして、他の2種類のINNODB BERKLEY(BDB)、また頻繁に使用されます。熟練した場合は、1つのエンジンを所有するのMySQL + APIを使用することができます。ここではいくつかのデータベースエンジンは、以下のとおりです。

ISAM:ISAMは、設計時に考慮にデータベースクエリの数が更新よりもはるかに大きい回数を取るために、明確に定義されたと定番データ管理テーブル、です。したがって、ISAM速度読み出し動作が素早く行われ、メモリおよびストレージリソースの多くを取ることはありません。ISAM二つの主な欠点は、それがトランザクションをサポートしていないということであるフォールトトレラントすることはできません。ハードドライブがクラッシュした場合、データファイルを復元することはできません。あなたは、それは常にその複製機能を通じて、リアルタイムですべてのデータをバックアップする必要があり、ミッションクリティカルなアプリケーションで使用されるISAMある場合、MySQLは、このようなバックアップアプリケーションをサポートすることができます。

MyISAMテーブル:MySQLのISAMのMyISAMがデフォルトの拡張フォーマットおよびデータベースエンジンです。MyISAMテーブルは、複数の同時読み取りを最適化し、運用を書くためにロック機構を使用し、多数の機能のインデックスとフィールドの管理にISAMを提供していないことに加えて、コストは、あなたが頻繁に更新を復元するためにOPTIMIZE TABLEコマンドを実行する必要があるということです無駄なスペースのメカニズム。myisamchkのツールのMyISAMスペースの無駄を復元するために、データベース・ファイルとmyisampackはツールを修復するなど、いくつかの便利な拡張、。MYISAMは、MySQLのWeb開発は、このような好意の主な理由となっている理由はおそらく、高速読み出し動作を、強調し、大量のデータでWEB開発で使用すると、読み出し動作を実行されるアクションです。そのため、ほとんどのWebホスティングプロバイダとプラットフォームのプロバイダーインターネットは専用MyISAM形式を可能にします。彼らは、テーブルの破損後にデータを回復することはできません、重要な欠陥のMyISAM形式。

HEAP:HEAPのみ内部メモリ一時テーブルに存在することを可能にします。ISAMとMYISAMよりも高速メモリヒープに常駐してみましょう、それが管理するデータは不安定であり、シャットダウン前に保存しない場合は、すべてのデータが失われます。データ行が削除された場合、ヒープは多くのスペースを無駄にしません。あなたがデータを選択して操作するSELECT式を使用する必要がある場合HEAPテーブルは非常に便利です。フォームを使用するテーブルをドロップし、覚えておいてください。

InnoDBは:InnoDBのデータベースエンジンは、MySQLは、技術の柔軟性の直接の製品を作成することであるが、この技術はMYSQL + APIです。MYSQLを使用している場合、あなたはISAMおよびMyISAMのデータベースエンジンからのほぼすべての直面する課題は、トランザクション処理(トランザクション処理)が外部キーをサポートしていませんサポートしていません。ISAMおよびMyISAMのエンジンの多くのより遅いが、InnoDBはトランザクション処理と外部キーのサポートが含まれていますが、これらの二つは持っていない最初の2つのエンジンです。あなたのデザインは、1つまたはこれらの機能の両方を必要とする場合、前述したように、あなたは背面にある2つのエンジンのいずれかを使用するように強制されます。


MyISAMテーブルとの間でInnoDBの差
  はInnoDBとMyISAMの2つのテーブルのMySQLの最も一般的に使用されるタイプの使用には多くの人々である、2つのテーブルタイプは、特定の用途に応じて、長所と短所を持っています。基本的な違いがある:InnoDBのタイプのためのMyISAMサポートしていない高度な処理取引の種類、およびサポート。MyISAMテーブル型は、InnoDBのタイプよりも数倍速く実行し、その性能を重視するが、トランザクションのサポートを提供していない、とInnoDBはトランザクションのサポート、高度なデータベース機能は、外部キーを持っています。
次の実装で詳細及び具体的な相違点のいくつかを以下のとおりです。
1.InnoDB FULLTEXTインデックス型がサポートされていません。
2.InnoDBの行の特定の数のテーブルを保存していない、InnoDBは再び行数を計算するために、テーブル全体をスキャンするとき、それは、SELECT COUNT(*)fromtableの実装ですが、MyISAMテーブルは、単に良い保存される行数を読み出しますことができます。COUNT(*)ステートメントは、操作のテーブルの2種類が同じである条件が含まれている場合、以下のことを注意してください。
3.フィールドのAUTO_INCREMENTタイプの場合、InnoDBは、フィールドのインデックスのみが含まれている必要がありますが、MyISAMテーブルでは、あなたは、インデックスと他のフィールドは、一緒に共同を確立することができます。
テーブルFROMとき4.DELETE、InnoDBはテーブルを再確立しますが、行ごとに削除されません。
5.LOAD表FROMMASTER InnoDBの操作が機能しない、溶液は最初InnoDBテーブルのMyISAMテーブルに入れ、次いで、InnoDBテーブルにデータをインポートしているが、表に使用される追加のInnoDB特性のために(例えば、外部キー)該当事項はありません。
さらに、InnoDBのテーブルの行ロックが絶対的ではなく、MySQLの範囲をスキャンするかどうかを決定することができない、InnoDBテーブルはまた、テーブル全体をロックし、SQL文実施例のようupdatetableセットNUM = 1人のここで、名前
二つのタイプの主な違いはINNODB支持トランザクション処理と外部キー、および行レベルロックである。MyISAMテーブルでサポートされていない。したがって、多くの場合、わずかなプロジェクトで使用するのに適していると考えられてMyISAMテーブルに簡単です。
私は、MySQLの出発を使用して、ユーザの視点として、InnoDBはとMyISAMテーブルは、より似ていますが、私の現在の操作と需要を達成するためのデータベースプラットフォームのメンテナンスから:安定性の99.9%は、スケーラビリティと高可用性の利便性がそうである、絶対にMyISAMテーブルそれは私の最初の選択肢です。
次のようである理由:
最初に私の現在のプロジェクトのすべての最ものプラットフォームの読みにホストされ、小規模なプロジェクトを書くのではなく、パフォーマンスのMyISAMを読まれる1は、強いInnoDBのがたくさんあります。
2は、MyISAMテーブルインデックスとデータを分離し、そしてインデックスが圧縮され、メモリ使用量が多くを向上させることに対応します。MyISAMテーブルよりもかさばることは小さくないのInnoDBになります圧縮を使用しない、インデックスをロードしてのInnoDBインデックスとデータが密接に結びついているであることができます。
図3は、プラットフォームの観点から、多くの場合、毎月または2つのアプリケーション開発者が誤って適用範囲が通常でテーブルをリードすることができない、書き込まないテーブルを更新していないが発生し、この時間のMyISAM優位性が明らかにただSQLにダンプし、ディレクトリデータベースの下に置くと、圧縮されたファイルコピー日から抽出されたカジュアルな対応表は、メインデータベースに、対応するバイナリログ補数に引き返しました。InnoDBの場合、私はそこに、このような高速にすることができ、Gサイズのデータ量私のプラットフォーム上のデータベース・インスタンスの最小は基本的に数十ので、私は、定期的に輸出xxx.sqlバックアップメカニズムと共にInnoDBを聞かせて言っていないことを恐れています。
4、それとの私の連絡先からアプリケーション・ロジック、SELECT COUNT(*)と最も頻繁によるため、SQL文全体の総運転の60%以上を占めることができるだろうし、これは実際に動作してInnoDBはテーブルをロックしますされます多くの人々は、それは主キーが有効である場合にのみ、非プライマリキーは、テーブル全体をロックすることで、InnoDBは、行レベルのロックだと思います。
彼らは、対応がそのテーブル、MYIファイルをfrm.MYD送るデータベースの対応するバージョンでそれらをできるようにするために5は、部門は、彼らにMyISAMテーブルをいくつかの定期的なデータテーブルを与えるために私を必要とし、多くの場合、アプリケーションがたくさんあり、それは簡単です。ライン上で開始し、他の人に光が、影響を受けたデータ辞書ファイル、相手が使用できないファイルので、あなたは、xxx.sqlのInnoDBをエクスポートする必要があります。
6、それはインデックスに基づいて更新操作のためのものである場合、ライブラリは、追跡することができるからのMyISAMは、InnoDBの、しかし非常に高い同時書き込み小さくてもよいものの比インサートのMyISAMとは、次いで、InnoDBはまだ達しのMyISAM書き込み性能を書く場合それをしない解決するサブライブラリーサブテーブルマルチインスタンス・アーキテクチャなどによっても問題です。
それがあれば大規模なプロジェクトは、ログなどの特定のタイプの行数百万(約合計7は、それから、それは理想的である限り、彼らはいくつかのselectcountこのマージテーブル(*)の操作を行うと、大幅にアプリケーション開発部門をスピードアップすることができますエンジンをマージし、MyISAMテーブルを使用します、調査)ビジネステーブル。
もちろん、InnoDBは、このような株式市場のシミュレーションプロジェクトとしてプロジェクト・サービスのために全く使用は、私はアクティブユーザーが20以上万回を使用し、また、非常に簡単InnoDBのではないではない対処ので、私は個人的にも、InnoDBのに似ていますが、データベース・プラットフォーム・アプリケーションの場合私は最初のMyISAMは、開始されます。
また、一部の人々は、MyISAMテーブルがあまりにも多くのアンチを書き込むことはできませんあなたが言うかもしれないが、私は私の既存のデータベース・プラットフォームの能力を使用すると言って、アーキテクチャによって相殺することができます、より多くの数百Tよりもマスタースレーブのデータ量を超える10億曲の毎日のPVを動的なページは、(一日あたり9000万クエリを扱う単一のデータベースに結果のmemcachedの始まりは展開しませんでしたので、大きなプロジェクトを含め、)PVの合計数にカウントされないinvokeがデータインタフェースを介して、いくつかの大規模なプロジェクトがあります。そして、周りの0.5-1で私の全体のデータベース・サーバーの負荷平均。
一般的に、MyISAMテーブルについて:
(1)コンピューティングの多くを数えます;
(2)非常に頻繁にまれなクエリを挿入するには、
(3)トランザクションがありません。
以下のためのInnoDB:
(1)高い信頼性要件を、またはトランザクションを必要とする;
(2)テーブルの更新とクエリはかなり頻繁にあり、データエンジンを作成するために、指定されたロックされた比較的大きなを見る機会。


可能なスイッチは、ANSI SQL MySQLの拡張--typeパラメーターに提供されるすべての柔軟性をしてみましょう。MySQLは、この層のデータベースエンジン形式を指定することができますので、彼らは時々 、テーブル形式を参照してください。次のサンプルコードでは、MyISAMテーブル、ISAMおよびHEAPエンジンを使用したテーブルを作成する方法を示しています。各表を作成するコードは、タイプパラメータの最後を除いて、同じであることに注意し、このパラメータは、データエンジンを指定するために使用されます。
以下は、参照の内容です:

表tblMyISAM(CREATE 
IDのINT NOT NULL AUTO_INCREMENT、
PRIMARY KEY(ID)、
value_a TINYINTは
)TYPE = MyISAMテーブルを
表tblISAM(CREATE 
IDのINT NOT NULL AUTO_INCREMENT、
PRIMARY KEY(ID)、
value_a TINYINTは
)TYPE = ISAMは
TABLE tblHeap(CREATE 
ID INTをNULL NOT AUTO_INCREMENT、
PRIMARY KEY(ID)、
value_a TINYINT 
)TYPE =ヒープ

また、1つのエンジンから別のエンジンにALTER TABLEコマンド、元のフォームを使用することができます。次のコードを移動するのInnoDB MyISAMテーブルにALTERテーブルエンジンを使用する方法を示しています。

次の参考文献の内容です。

ALTER TABLE tblMyISAM変更TYPE = InnoDBは

この目的を達成するための3つのステップでのMySQL。まず、この表のコピーが作成されます。コピーが別のエンジンに移動させながら、任意の入力データの変更は、キューイングされます。最後に、すべてのデータの変更は、新しいフォーム、フォームに送信され、元が削除されるキューに入れられました。

TABLEのショートカットをALTER

あなただけのISAMからのMyISAMのテーブルを更新する場合は、ALTER TABLE式を記述することなく、MySQL_convert_table_formatコマンドを使用することができます。

あなたは、特定の形式の管理にどのエンジンを決定するために(ANSI標準に別のMySQLの拡張である)SHOW TABLEコマンドを使用することができます。Typeフィールドでのデータベースエンジンの名前:SHOW TABLEはデータの複数のカラムを持つ結果セットを返します、あなたは、すべての種類の情報を取得するために照会することがこの結果セットを使用することができます。以下のコード例は、[テーブルの使用法を示す:
コードコードをコピーし、以下の通りであります:

tblInnoDB FROM [テーブルのSTATUS

TABLEあなたは情報を取得することができます取得するには、[テーブル名]のSHOW CREATE TABLEのSHOWを使用することができます。
通常の状況下では、MySQLはデフォルトのストレージエンジンのさまざまなを提供しています、あなたは以下を表示することができます:
(1)MySQLのストレージエンジンは今何を提供観:MySQLの>はエンジンを表示します;
(2)あなたの現在のデフォルトのMySQLのストレージエンジンを確認します:MySQLの>は「%のstorage_engineの%」のような変数を示し;
(3)あなたはどのようなエンジン(結果は現在使用されているストレージエンジンを示すために、テーブルの背後にあるエンジンのパラメータに表示されている)を使用してテーブルを見たいと思ってます。mysql> SHOWテーブルを作成しますテーブル;
およびMySQLを使用する場合は最終的には、エンジンにコンパイルされていませんが起動していない、それは役に立たない、MySQLはこれを要求しません。そして、それだけであなたのデフォルトの形式(MyISAMテーブル)テーブルを与えるだろう。デフォルトの表形式を使用することに加えて、MySQLのエラーを与えるための方法がありますが、特定のデータベース・エンジンが利用可能であるかどうかわからない場合は、今のところ、あなたは表の形式を確認するには、SHOW TABLEを使用する必要があります。
より多くの選択肢がより良いパフォーマンスを意味する
アカウントには、この追加の複雑さを取って、再コンパイルして追跡する必要がある指定の表のエンジンを、なぜあなたはまだ、デフォルト以外のデータベースエンジンにそれを使用したいのですか?答えは簡単です:あなたの要件を満たすようにデータベースを調整します。
確かに、MyISAMが速い確かですが、トランザクション処理ロジックの設計が必要な場合、あなたは自由にトランザクション処理エンジンをサポートするために使用することができます。さらに、MySQLのため、取引の形態はMyISAMのエンジンに、より多くの光を必要としませんが、あなただけ、トランザクションのパフォーマンスの最適化を実行するために必要な形成することができるので、あなたは、この層のデータベースエンジンのアプリケーションを形成できるようにすることができます。MySQLの場合、柔軟性が鍵となります。

他の態様
1.MySQL公式InnoDBはこの方法を説明しますInnoDBはしてMySQLを提供してコミット、トランザクションセーフ(ACID準拠)のストレージエンジンのロールバック、クラッシュリカバリ機能。InnoDBの行レベルロックのSELECT文ともOracleスタイル一貫非ロック読み取りを提供し、これらの機能は、マルチユーザーの展開とパフォーマンスを向上させます。InnoDBのBOC-レベルが非常に小さいスペースのためにロックするので、InnoDB内でロックされて拡大する必要はありません。InnoDBはまた、必須FOREIGN KEYをサポートしています。SQLクエリでは、あなたは自由にしても、同じクエリでも混合することができる、混同他のMySQLテーブルでのInnoDBテーブルタイプを入力することができます。
2.InnoDB最大のパフォーマンスが大量のデータを処理するように設計され、そのCPUの効率は、他のディスクベースのリレーショナルデータベースエンジンが一致することができないかもしれません。
3.InnoDBストレージエンジンは完全にメインメモリにキャッシュデータとインデックスにMySQLサーバ、InnoDBストレージエンジンと統合され、独自のバッファプールを維持しています。InnoDBはテーブルスペース内のテーブル&インデックスを格納し、表スペースは、いくつかのファイル(またはrawディスクパーティション)を含めることができます。これはMyISAMテーブルとは異なる、例えばMyISAMテーブルの各テーブルは、別々のファイルに存在しています。InnoDBテーブルは、ファイルサイズは、オペレーティング・システム2ギガバイトに制限されている場合でも、任意のサイズにすることができます。
4.InnoDBのデフォルトは、MySQLのバイナリディストリビューションに含まれています。WindowsのEssentialsのインストーラは、InnoDBのWindows上でのMySQLのデフォルトのテーブルになります。
5.InnoDBは、高い性能を必要とする数多くの大規模なデータベースサイトに生成するために使用されます。有名なインターネットニュースサイトSlashdot.orgはInnoDBの上で実行されます。Mytrix、Inc.のストアよりInnoDB内のデータの1TBよりも、第二のInnoDBの挿入/更新あたりの平均800回で処理された他のサイトがあります。

おすすめ

転載: www.cnblogs.com/ericz2j/p/11110674.html