如何以正确的方式创建具有相似数据的表?

时间:2019-01-04 08:01:47

标签: mysql sql database mariadb

我正在尝试制作一个程序,以便在服务器不在线时对其ping通一些服务器和服务,并将其写入数据库。因此,在制作时,我只是想知道哪种制作方法是最好的,我很可能会要求这三个项目,但是有时候我却不需要。

这是我当前的架构:

CREATE TABLE webservice_historylog (
    id_webServiceConnection BIGINT PRIMARY KEY AUTO_INCREMENT,
    id_Location varchar,
    datetime_Connect datetime,
    response_TimeMs int,
    status_Code varchar(5),
    status_Message varchar(255)
);

CREATE TABLE internet_historylog (
        id_internetConnection BIGINT PRIMARY KEY AUTO_INCREMENT,
        id_Location varchar,
        datetime_Connect datetime,
        response_TimeMs int,
        status_Code varchar(5),
        status_Message varchar(255)
);

CREATE TABLE postgresql_historylog (
        id_postgresqlConnection BIGINT PRIMARY KEY AUTO_INCREMENT,
        id_Location varchar,
        datetime_Connect datetime,
        response_TimeMs int,
        status_Code varchar(5),
        status_Message varchar(255)
);

我可以用它制成一个视图表

还是应该放在一张桌子下面?像这样。

CREATE TABLE connection_historylog (
            id_Connection BIGINT PRIMARY KEY AUTO_INCREMENT,
            id_Location varchar,
            connectionType varchar, # Internet, WebService, Databases
            datetime_Connect datetime,
            response_TimeMs int,
            status_Code varchar(5),
            status_Message varchar(255)
);

我想要的东西:

提高了长期目标的性能,因为它像一分钟一样活跃。这也将影响我以后如何调用此数据。可以询问更多信息。

2 个答案:

答案 0 :(得分:1)

通常,应将相似的表放在一个表中。随着时间的推移,这具有多个优势:

  • 查看不同类型数据的查询要简单得多,并且更容易优化。
  • 只需插入现有表即可添加新类型。
  • 维护和操作更加简单。例如,添加索引仅需要在一个表上发生,而不需要在多个表上发生。
  • 在仅插入环境中,表将具有已填充的数据页,这对于提高性能是有益的。

要使这样的环境最有效,您将需要索引甚至分区。具体索引取决于数据的使用方式。

答案 1 :(得分:1)

单个表,但是主要是因为这可能是“正确”的方式。

其他说明:

  • 两种方式的写入性能相同。
  • 每分钟INSERT个是微不足道的。甚至1 /秒都是微不足道的。每秒1000次即可获得成功。
  • 读取的性能取决于您要进行的过滤/排序。看到SELECTs之后,我们就可以讨论INDEXes
  • 1行/分钟少于一百万行/年,所以我认为没有必要讨论扩展问题。
  • 尚无任何内容表明PARTITIONing有任何用处。