2012-03-19 7 views
0

私は2つのプロセスで使用されるテーブルを持っています。最適なテーブルデザインプリミティブキーとvarchar値を持つmysql

の表は、次のようになります。

valueID (INT PRIMARY AUTO INCREMENT) 
value (VARCHAR 100 UNIQUE) 
  • プロセス1クエリのSELECT valueID FROM table WHERE value = '$val'などは二

  • プロセス2あたり> 250の割合で行い、反対します:>の割合でSELECT value FROM table WHERE valueID = '$valid'を400秒/秒

この表は大きくヒットし、かなり大きい> 50,000万行以上の高速で成長しています。 現在、テーブルのサイズが大きくなっているため、パフォーマンスが低下しています。私はそれを最適化したい。パーティショニングを考えると、他のパーティショニングはパフォーマンスにマイナスの影響を与えます。 現在、MyISAMでもInnoDBでも可能です。

この表の最適な設定は何ですか?

+0

のような範囲の速度をdevideことは、次のマルチコラムカバーするインデックスを持っています:、( 'valueIDを'(値、valueIDを) 'と値) '? –

+0

設定パラメータで何かしたことはありますか?すべての構成が等しく作成されるわけではありません。 –

+0

プライマリインデックスとユニークインデックスを使用します。結合されたインデックスを使ったテストではすべての処理が遅くなりました(両方のインデックスが存在していても、組み合わせではなくプライマリが使用されます) – Martin

答えて

0

あなたは

SELECT valueID FROM table WHERE value = '$val' at a rate>=250 and rate<=400 

SELECT valueID FROM table WHERE value = '$val' at a rate>=401 and rate<=600 
+0

レートは1プロセッサあたりの1秒あたりのクエリの数...これはさらに高い値になります – Martin

+0

数百万の行を含む表から1秒未満で行を戻すsolr検索を使用します。 – neeraj

+0

proces 2は、idの値を返すsolrのような検索エンジンの応答に2つの動作をします。このようなインデックスでこのテーブルを使用することは、idと値がリアルタイムで利用可能である必要があるため不可能です – Martin

関連する問題