SQL社交网络,保留消息的正确方式?
我正在建立一个社交网络,现在我面临一个问题 那么,哪一个保存消息更快: 要有一个数据库, 以及为每个新用户的消息创建新表 像这样:SQL社交网络,保留消息的正确方式?,sql,Sql,我正在建立一个社交网络,现在我面临一个问题 那么,哪一个保存消息更快: 要有一个数据库, 以及为每个新用户的消息创建新表 像这样: 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
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)
);
INSERT INTO 'user_messages' (id, new, time, from_id) VALUES ('id_value', 'Y', now(), 'friend_id');
或者
使用复制将所有邮件保留在一个表中???
使用索引
如果有十亿行呢?
像这样:
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)
);
INSERT INTO 'user_messages' (id, new, time, from_id) VALUES ('id_value', 'Y', now(), 'friend_id');
如果不始终使用动态生成的SQL,每个用户创建一个表将成为查询的噩梦
一个更好的选择是创建一个表,并使用一个外键将该表中所有用户的所有消息存储回users表。外键将被编入索引,并且不会出现严重的性能问题。如果您认为您将拥有数十亿行或消息,那么您的数据库结构应该相应地进行缩放以处理这些数据量,但您的数据库设计不应该因此而改变。如果不始终使用动态生成的SQL,则为每个用户创建一个表将成为查询的噩梦 一个更好的选择是创建一个表,并使用一个外键将该表中所有用户的所有消息存储回users表。外键将被编入索引,并且不会出现严重的性能问题。如果您认为您将拥有数十亿行或消息,那么您的数据库架构应该相应地进行缩放以处理这些数据量,但是您的数据库设计不应该因此而改变 那么,哪一个保存消息更快: 虽然我怀疑SQLServer对表的上限明显小于对行的上限,但两者都不可能更快。我不知道您是否会因为跨不同数据库的事务而降低性能 正确的数据库设计将决定单个表 使用索引如果有十亿行怎么办?像这样:
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)
);
INSERT INTO 'user_messages' (id, new, time, from_id) VALUES ('id_value', 'Y', now(), 'friend_id');
嗯,也许在你开始解决这个问题之前,你应该先看10亿行。但是请注意,您可以出于许多原因(通常是出于性能原因)在GoogleSQLServer表分区中对数据进行分区
那么,哪一个保存消息更快:
虽然我怀疑SQLServer对表的上限明显小于对行的上限,但两者都不可能更快。我不知道您是否会因为跨不同数据库的事务而降低性能
正确的数据库设计将决定单个表
使用索引如果有十亿行怎么办?像这样:
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)
);
INSERT INTO 'user_messages' (id, new, time, from_id) VALUES ('id_value', 'Y', now(), 'friend_id');
嗯,也许在你开始解决这个问题之前,你应该先看10亿行。但是请注意,您可以出于许多原因(通常是出于性能原因)在GoogleSQLServer表分区中对数据进行分区