2012-02-12 5 views
1

私たちはmysqlを使用しています。私たちは10億行の巨大なテーブルを持っています。エンジンはInnoDBです。 50%SELECT、30%UPDATE、1分あたり20%パフォーマンスを向上させたいので、単一のテーブルを複数のテーブルに分割します。しかし分割することで、パフォーマンスは少し向上していないことがわかりました。どうして?スプリットテーブルがパフォーマンスを向上させるのは常識ですか?データをマルチテーブルに分割してもパフォーマンスが向上しないのはなぜですか?

サーバは、4コア、SCSI RAID 5ハードディスク、32GBのメモリです。ただ1つのサーバー。

+0

は、あなたのユースケースについてより多くの情報が必要でしょう。私は通常、行を分割すると、最近のテーブル(レコードの数がはるかに少ない)とアーカイブテーブルがある場合にパフォーマンスが向上すると考えています。これは非常に稀です。あなたのクレジットカードをオンラインで見ることを考えている。最近の転記は表1にあり、表2はあなたの過去の履歴を最近過ぎてしまいます。最近はいつも見るのですが、歴史ははるかに少ないです。アーカイブを見る必要があるときは、何も改善していないことに注意してください。 – Prescott

+0

この表は、ユーザーのサブスクリプション情報として使用されます。つまり、新しいユーザ(携帯電話番号)がサービスに加入した後、このテーブルに行を挿入します。ユーザーがすでにプラットフォームにいる場合は、テーブルを更新し、ユーザーがサービスの登録を解除したい場合は、そのユーザーのレコードも更新します。 – Gao

+3

ユーザを挿入するには、2つのテーブルをチェックして、そのユーザが存在するかどうかを確認する必要がありますか?更新するには、両方のテーブルをチェックして、ユーザーが存在するかどうかを確認してから挿入しますか?どのようにテーブルを分割していますか?その方法は何ですか? – Prescott

答えて

0

あなたの質問にある情報に基づいて:あなたは単一のRAIDセットを持っています。

だから、あなたは単一のテーブルを持っていたとき、それはそのRAIDセットにあった。テーブルを分割すると、両方の新しいテーブルが同じRAIDセットにあります。だから、パフォーマンス上のメリットはありません。

実際に2つのテーブルを処理する必要があるため、実際にパフォーマンスが低下します。

パフォーマンスを向上させるには、異なるディスクにデータを格納するために最低限必要です。シャーディングを使用して異なるサーバーにデータを配置することをお勧めします。いくつかの比較のために

は、以下を参照してください。http://xeround.com/blog/2011/11/mysql-sharding-vs-mysql-partitioning

関連する問題