2012-02-14 7 views
1

私はソーシャルネットワークを構築していますが、今は問題に直面しました。 (メッセージを保つために)高速である1のでSQLソーシャルネットワーク、メッセージを保存する正しい方法は?

、:

つのデータベース、 を持っているし、(メッセージのために)新しいテーブルを作成するために、新しいユーザーあたり? (複製を)1つのテーブル内のすべてのメッセージを維持するために

CREATE DATABASE 'user_messages'; 

CREATE TABLE 'user_id' (

    id int(32) NOT NULL PRIMARY KEY, 
    new ENUM ('Y', 'N') NOT NULL DEFAULT 'Y', 
    time timestamp NOT NULL, 
    from_id int(32) 
); 

OR、

???:このように

(INDEXesの使用) 10億行がある場合はどうなりますか?このよう :

INSERT INTO 'user_messages' (id, new, time, from_id) VALUES ('id_value', 'Y', now(), 'friend_id'); 

答えて

5

は、ユーザーごとに一つのテーブルを作成すると、dynamicly生成されたSQLのすべての時間を使用せずに照会する悪夢になります。

より良いオプションは、1つのテーブルを作成し、そのテーブル内のすべてのユーザーのすべてのメッセージを、外部キーを使用してユーザーテーブルに戻すことです。外部キーは索引付けされるため、大きなパフォーマンスの問題は発生しません。数十億の行(またはメッセージ)が必要な場合、その量のデータを処理するためにデータベースのアーキテクチャーをスケールする必要がありますが、これによりデータベースの設計を変更しないでください。 (メッセージを保つために)高速である1

ので
+0

インデックスに登録する... –

1

、:

それはそうなのですでもない私は、SQL Serverは、それが上の上限のものより有意に低いテーブルには上限があると疑われるものの、高速であります行。また、異なるデータベースにまたがるトランザクションで、滑らかなパフォーマンススロープを下回るかどうかはわかりません。

適切なデータベース設計によって単一のテーブルが指定されます。

(INDEXを使用)何十億行がある場合はどうなりますか?このように:

この問題を解決するには、10億行になる必要があります。ただし、通常はパフォーマンスのために、さまざまな理由でデータ(Google SQL Server Table Partitioning)をパーティション化できます。

関連する問題