どのように選択するには、MySQLのMyISAMテーブルとInnoDBストレージエンジン
MySQLは、各ストレージエンジンは、独自の長所と短所があり、複数のストレージエンジンを持っている、あなたが最良の使用を選択することができますのMyISAM、InnoDBは、MERGE、MEMORY(HEAP)、BDB(BerkeleyDBの)、実施例、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
MySQLのストレージエンジンのMyISAMとInnoDBのだけではなく、2にある間に、しかし、2つが一般的です。
2つのストレージエンジンの機能とのおおよその違い:
1)のInnoDBトランザクションをサポートし、MyISAMテーブルはサポートしていませんが、これは非常に重要です。トランザクションはそれがない限りも復元ロールバックすることができるミスなどの付加および欠失のシリーズのような高度な治療法であり、そしてMyISAMテーブル。
2)クエリベースのアプリケーションのためのMyISAMならびに挿入、頻繁な変更のためのInnoDB、および高セキュリティアプリケーションを含みます。
3)のInnoDBサポート外部キー、MyISAMテーブルはサポートしていません。
4)MySQL5.5.5から、InnoDBがデフォルトのエンジンです。
5)InnoDBのFULLTEXTインデックスのタイプがサポートされていません。しかし、あなたはスフィンクスプラグインがフルテキストインデックスをサポートしているのInnoDBを使用することができます。
テーブルから、InnoDBはどのように多くの行を計算しますが、MyISAMテーブルは、単に保存する行の良い番号を読み取るために、再度、テーブル全体をスキャンする必要がある場合6)テーブルの行数は、SELECT COUNT(*)として、InnoDB内で保存されません。COUNT(*)ステートメントはMyISAMテーブルでも、テーブル全体をスキャンする必要条件が含まれている場合、以下のことを注意してください。
7)自己成長の分野では、InnoDBはフィールドのインデックスのみを含まなければならないが、MyISAMテーブル内のインデックスと他のフィールドは一緒にジョイントを確立することができます。
8)表全体を空に、InnoDBが行ずつ削除することで、効率が非常に遅いです。MyISAMテーブルは、テーブルを再構築します。
テーブル全体を更新テーブルとしてロックされているいくつかのケースでは9)のInnoDB行ロックサポート(設定= 1ここで、「%イ%」のようなユーザ。
第二に、MyISAMテーブルとInnoDBの上で使用することを選択:
MYISAMとInnoDBが設けられた二つのMySQLデータベースのストレージエンジンです。両方の長所と短所が異なるように記述することができます。InnoDBはMYISAMがサポートされていない、そのようなトランザクション機能と行レベルのロックのようなリレーショナル・データベースの高度な機能の一部をサポートします。MYISAMより良い性能、より少ないストレージスペース。だから、特定の用途に応じて、ストレージエンジンの種類を選択します。
アプリケーションでトランザクションを使用する必要がある場合は1)、あなたはInnoDBエンジンを選択する必要がありますは間違いありません。しかし、注意を払って、行レベルロックのInnoDBは、条件付きです。主キーが存在しない条件は、ロックがまだ完全なテーブルになりますとき。例えば、mytableは、このような削除DELETE FROMステートメント。
アプリケーションが高いクエリのパフォーマンスを必要とする場合2)、MYISAMを使用する必要があります。MYISAMインデックスとデータが分離され、圧縮されたインデックスは、メモリをより有効に利用することができます。INNODBよりだから、そのクエリのパフォーマンスが有意に良好。圧縮後のインデックスは、一部のディスクスペースを節約することができます。MYISAMが大幅にクエリLIKE効率を最適化することができ、フルテキストインデックスを、持っています。
中には、わずかな用途のために使用することがMYISAMが、それは単なる偏見であると言います。
もしそのようなサブサブテーブルデータベースとして、インフラストラクチャをアップグレードするのではなく、単純にストレージエンジンに依存することによって解決することが要求される大量のデータ、。
今、私たちは、一般的にはInnoDBを選択し、主のMyISAMテーブル全体のロック、シリアル問題を読み書き、ロックテーブルの効率化によって複雑、読み取りのための非効率的なのMyISAMと集中型のアプリケーションが正常に選ばれ行かない書きされています。Qiuqiuを学ぶビッグデータは、705を取り付けた後、Qun * 606 * + [859]添付しました
第三に、MySQLデータベースのデフォルトのストレージエンジンに:
MySQLのMyISAMテーブルとInnoDBが2つのストレージエンジンです。
それはデフォルトでインストールされている場合、それはあなたがデフォルトのストレージエンジン= INNODBのmy.cnfファイルを見つけることができ、InnoDBテーブルでなければなりません。
もちろん、あなたがテーブルの建設時にストレージエンジンを指定することができます。
対応する情報がテーブルxxを作成ショーを通して見ることができます。
第四に、比較でのMySQLのInnoDBとMyISAMテーブルで
1)MyISAMテーブル:
ディスク上に3つのファイルに各MyISAMストレージ。拡張を開始するテーブルの最初のファイル名の名前は、ファイルの種類を示します。
FRMファイルを格納するテーブル。
ファイル格納テーブルのデータMYD(MYDATA)。
インデックスMYI(MYIndex)ファイルストレージテーブル。
MyISAMテーブルを圧縮することができる、と彼らは、フルテキスト検索をサポートしています。これは、トランザクションをサポートしていませんが、外部キーをサポートしていません。もし物事のロールバックはアトミックではない、不完全なロールバックになります。比較的小さな同時を実行するための表のアップデータロック。あなたはSELECTの多くを行う場合は、MyISAMがより良い選択です。
MyISAMテーブルインデックスとデータが分離され、インデックスが圧縮され、メモリ使用量が多くを向上させることに対応します。MyISAMテーブルよりもかさばることは小さくないのInnoDBになります圧縮を使用しない、インデックスをロードしてのInnoDBインデックスとデータが密接に結びついているであることができます。
MyISAMのインデックスはメモリではなく、データにキャッシュされています。InnoDBのデータが相対的に言って、大きなサーバーのメモリ、より大きなInnoDBの再生利用、メモリにキャッシュされています。
長所:選択、フルテキストインデックスの数が多いため、比較的高速なクエリデータ。
短所:トランザクションが外部キーをサポートしていませんサポートしていない、同時実行少量の一括更新には適していません
2)InnoDBは:
トランザクションのこのタイプは安全です。それは特性BDBの同じ種類を持って、彼らはまた、外部キーをサポートしています。InnoDBのテーブル速いです。BDBは、機能よりも豊かなを持っているので、あなたは、トランザクションセーフストレージエンジンを必要とする場合、それを使用することをお勧めします。更新時のテーブルの行ロック、並行性の比較的大量。あなたがデータのINSERTまたはUPDATEの多数を実行する場合、パフォーマンス上の理由から、あなたはInnoDBテーブルを使用する必要があります。
長所:サポートサービス、外部キーのサポート、並行処理は、一括更新に適した大きさです。
短所:選択の多数に適した比較的高速なクエリデータ、ありません。
物事のInnoDBのテーブル型のサポートは、主な理由の速度はAUTOCOMMITがオンになっているデフォルトの設定で影響を与え、そしてプログラムが明示的にトランザクションを開始BEGIN呼び出すことはありません、各リードが自動的に真剣スピードに影響を与え、コミット挿入します。あなたは、パフォーマンスが大幅に向上します(自動コミットも開くことができたとしても)多くのことを形成するSQL、SQLを実行する前に開始呼び出すことができます。
基本的な違いは次のとおりです。
MyISAMテーブルは、InnoDBのタイプをサポートしながら、高度な処理のトランザクション処理の種類をサポートしていません。
MyISAMテーブル型は、InnoDBのタイプよりも数倍速く実行し、その性能を重視するが、トランザクションのサポートを提供していない、とInnoDBはトランザクションのサポート、高度なデータベース機能は、外部キーを持っています。
ます。https://juejin.im/post/5d09d5b96fb9a07f091ba717で再現