admin

许多表或行,在SQL中哪个更有效?

sql

我正在构建一个程序,用于存储公司的新闻头条以及来自各种来源的时间戳。

假设公司的数目为1000。就像苹果,谷歌,微软等。

因此,我可以考虑两种选择。

  1. 一个有很多行的表(上面的代码只是一个例子)。

    CREATE TABLE news
    

    (
    news_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    company VARCHAR(10) NOT NULL,
    timestamp TIMESTAMP NOT NULL,
    source TEXT NOT NULL,
    content TEXT NOT NULL,

    )

    // I also can make company and timestamp as primary keys,
    and news_id will be unique key.*

  2. 1000桌

    CREATE TABLE news_apple // and news_google, news_microsoft, news_...(x 1000)
    

    (
    news_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    timestamp TIMESTAMP NOT NULL,
    source TEXT NOT NULL,
    content TEXT NOT NULL,

    )

大多数时候,我会找到有关该公司的消息。假设每个公司有10000多个新闻。我想知道如果我在第一个选项中使用’WHERE’子句,它会比第二个选项慢。

就性能而言,哪一个效率更高?为什么?


阅读 175

收藏
2021-05-10

共1个答案

admin

关系数据库被设计为每个表存储许多行。有很多机制可以简化大型表,例如:

  • 在字段的任意组合上建立索引以加快搜索速度
  • 页面缓存,因此常用页面保留在内存中
  • 垂直分区(列数据库)以进一步提高请求速度
  • 先进的算法,例如哈希联接和分组依据(至少在MySQL以外的数据库中)
  • 使用多个处理器和磁盘来处理查询

将数据放在单个表中时,有一件事情比较困难,那就是安全性。而且,实际上,在某些情况下,这是一个主要问题,并且基本上需要将数据放在单独的表中。这些应用程序很少见,而且相差很远。

举例说明在多个表中存储数据有多糟糕,可以想象一下,在您的系统中,每个公司有一条记录,然后将其存储在一个表中。该记录存储有关公司的信息-
诸如名称,地址之类的信息。呼叫是100字节的信息。

在您的架构中,每个“公司”都有一个单独的表,因此每个表一行。该记录将驻留在一个数据页上。数据页可能为16 KB,因此您浪费了大约15.9
KB来存储此数据。存储1000条这样的记录占用了16 MB的空间,而不是大约7页(112 KB)。这可能会严重影响性能。

此外,使用多个表时,您无需考虑维护所有表以及确保不同表中数据正确性的挑战。维护更新需要应用于数千个表,而不是少数几个。

2021-05-10