2012-02-17 6 views
1

私はテーブル構造をレイアウトしており、ストレージエンジンをセットアップする方法についての十分な知識がありました。この設定では、innodbとmyisamの組み合わせが最適ですか?

テーブルの最初のフィールドは、整数タイプで、AUTO INCREMENTです。フィールド2〜5は、約95%の読み取り、5%の書き込み(書き込みはINSERTのみです)ですが、フィールド6は常に更新され、約50%の読み取り(SELECTステートメント)と50%の書き込み(10%INSERT 90%UPDATE) )

私はちょうどあなたのテーブルhttp://dev.mysql.com/doc/refman/5.0/en/internal-locking.htmlからの削除のエントリが存在しない場合は、あなたが自由にロックずにMyISAMテーブルのための同時INSERTとSELECT文を混在させることができことをお読みください。これまでテーブルから行を削除するつもりはありません。

テーブルを2つの異なるテーブルに分割することをおすすめしますか?最初のテーブルはMYISAMで、上記のフィールド1〜5(95%読書、5%書込み)です。 2番目のテーブルはinnodbで2つのフィールドを持ちます。最初のテーブルは最初のテーブルの最初のフィールドと同じAUTO INCREMENTで、2番目のフィールドは常に更新されています(50%は50%書き込み)。

異なるテーブルへの2つの挿入ステートメントは、順番に発生するはずです。まれに、最初のINSERT文が実行されますが、2番目のINSERT文は実行されません。各表の最初のフィールドが互いに正しくマップされるようにするにはどうすればよいですか?

+1

対のInnoDBを明確に、TABLE1(MyISAMテーブル)と表2と判断いくつかの他の記事です(innodb)は共に「常に更新されている」コラムを共有しますか? –

+0

Hey Mike、彼らが共有する唯一の列は、自動増分列です。したがって、表1と表2の20行目は、お互いに関係している必要があります。 – user784637

+1

ですから、table1.ever_changing_col!= table2.ever_changing_colです。私が尋ねる理由は、列が同じではないにもかかわらず、それらがlinking_idを共有していれば、tabl2.ever_changing_colがtable1を補うかどうかです。 –

答えて

2

MyISAMテーブルに複数のVARCHARフィールドがある場合、you may want to convert the table's row format to FIXED。これにより、MyISAMテーブルとそのインデックスファイルが80%から100%に拡大される可能性がありますが、それ以外の変更なしにクエリパフォーマンスが20%〜30%向上します。

テーブルが相互に排他的な方法(JOINなし)で使用されている限り、OKである必要があります。なぜInnoDBとMyISAMの間にJOINsがないのですか? JOINを実行するすべてのクエリは、InnoDBとMyISAMを混在させることはできません。そうしないと、すべてのSELECTクエリは、MyISAMテーブルとInnoDBテーブルの両方でフルテーブルロックで劣化します。ここで

は、私は完全に明確にするためのMyISAM

+1

+1。私はRolandoの記事のいくつかを読んで、彼は彼の試合中です。 –

関連する問題