2011-01-02 8 views
5

私はInnoDBMyISAMの間でより良いものについて様々なスレッドを読んだ。議論は、それを使うか、他のものを使うかのようです。テーブルに応じて両方を使用することはできませんか?InnoDBまたはMyISAM - なぜ両方ではないのですか?

これを行う際の短所は何ですか?私が知る限り、CREATE TABLEコマンド中にエンジンを設定することができます。したがって、読まれることが多い特定のテーブルはMyISAMに設定できますが、トランザクションサポートが必要なテーブルではInnoDBを使用できます。

+1

クラスタ化主キーインデックスは何ですか? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.htmlクラスタ化されたプライマリキーインデックスが通常のbtreeインデックスより優れているのはなぜですか? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

答えて

13

MyISAMとInnoDBの両方のテーブルを同じデータベースに入れることができます。しかし、非常に大きなテーブルを持つ場合、MyISAMはテーブルロックの問題を引き起こします。これは最終的には、単一のトランザクションのためにテーブル全体をロックします。これは、多くのユーザーがWebサイトを使用している場合は非常に悪いことです。たとえば、ユーザーがサイトで何かを検索していて、クエリが完了するまでに数分かかる場合は、テーブル全体がロックされているため、その期間に他のユーザーがサイトを使用することはできません。

一方、InnoDBは行レベルのロックを使用します。つまり、その行はトランザクション中にテーブルからロックされた唯一の行です。 InnoDBは、MyISAMのようなフルテキスト検索を提供していないため、検索時の処理速度が遅くなる可能性がありますが、MyISAMのテーブルレベルのロックと比較すると大きな問題はありません。多くの大規模サイトのように、InnoDBを使用する場合は、Sphinxのようなサーバー側の検索エンジンをフルテキスト検索に使用できます。あるいは、MyISAMテーブルを使ってf00のような検索を行うこともできます。私は個人的に行レベルのロック機能のためにInnoDBを推奨したいと思いますが、他にも多くの方法で全文検索を実装できるからです。

基本的には、多くの選択、挿入、および更新を含むメッセージボードアプリケーションをお持ちの場合、おそらくInnoDBが一般的に適切な選択でしょう。 しかし、そういったもの(あるいは登録ユーザで他のもの)を構築しておらず、主に静的コンテンツ(または書き込みより多くの読み込み)で作業しているのであれば、MyISAMを使うことができます。

+4

フルテキスト検索が必要な場合は、myisamテーブルを作成するだけです。あなたのきれいにクラスタ化されたinnodbデータに簡単に索引付けするために使用します。 –

+0

はい、これも非常に良い選択です。 –

+0

ありがとう、素晴らしい答え。私のアプリケーションで判断すると、それはInnoDBのように見えます。 – Skoder

3

はい、実際には両方を同じデータベースで使用することができます。それぞれのテーブルを個別に選択することができます。

0

データベースレベルではなく、テーブルレベルでInnoDBまたはMyISAMを選択します。したがって、1つのデータベース内で、InnoDBエンジンを実行するテーブルとMyISAMを実行するテーブルを持つことができます。あなたが指摘したように、トランザクションなどを必要とするテーブルではInnoDBを使い、フルテキスト検索などの他の機能が必要な場所ではMyISAMを使うことができます。

1

つまり、多くのINSERT命令とUPDATE命令を処理できる信頼性の高いデータベースが必要な場合に、InnoDBは役に立ちます。

そして、MyISAMは、テーブルロックの欠点を考慮して、書き込み(INSERTおよびUPDATES)ではなく読み込み(SELECT)命令を大量に取るデータベースが必要な場合に適しています。

あなたはチェックアウトすることができます。
Pros and Cons of InnoDB
Pros and Cons of MyISAM

関連する問題