Stream
という名前のクラスがデータベースに多数あり、さらに多くのレコードが常に追加されています。 streams
テーブル内のフィールドのうち、rating
は、-1,0,1、またはnullにすることができます。私は、「評価された」と評価が-1,0または1であり、「評価されていない」と評価されていると評価します。今のところ、ストリームテーブルには24Mのレコードがあります。 20Mは定格、4Mは定格ではない。評価されていないレコードについては、ストリームテーブルを頻繁に照会する必要があります。問題は、そのような大きなテーブルを照会するのに時間がかかることです。Ruby on Railsアプリケーションでテーブルを3つのテーブルに分割する
ストリームテーブルを3つの別々のテーブルに分割することを考えました。定格ストリームテーブル、未評価ストリームテーブル、古い未評価ストリームテーブルがあります。それが動作する方法は、新しいストリームが作成されます。新しいレコードは未評価なので、未評価のストリームテーブルに配置されます。定格の場合は、定格ストリームテーブルに移動します。 1週間以上評価されていない場合は、古い未評価ストリームテーブルに移動されます。
buzz.rated_streams.first
interest.unrated_streams.first
user.old_streams.first
RatedStream.find(1).buzz
UnratedStream.find(2).interest
OldStream.find(3).user
レートがありませんストリームテーブル
がはるかに高速に照会することができます:私はまだのように、シームレスにStream
クラスのメソッドとの関連付けを使用できるようにする必要があります。定格ストリーム表は分析に役立ちます。古い未評価ストリームテーブルは古いデータのダンプになります。
私はいくつかの質問があります。テーブルを分割するのは良い考えですか?もしそうなら、私はすべてを破壊から守るためにそれをやるでしょうし、Stream
クラスと同じ方法と関連付けを使用しますか?テーブルを分割するのが悪い考えであれば、どうすればいいですか?
私は実際にそれを試みましたが、クエリ時間に基づいて状況を悪化させるように見えました。それは意味をなさないでしょうか、私は間違ったことをしましたか?また、「カバーする」とはどういう意味ですか? – Eric
これを読む:[索引をカバーする](http://peter-zaitsev.livejournal.com/6949.html)。 –