我正在构建一个程序,用于存储公司的新闻头条以及来自各种来源的时间戳。
假设公司的数目为1000。就像苹果,谷歌,微软等。
因此,我可以考虑两种选择。
一个有很多行的表(上面的代码只是一个例子)。
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.*
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’子句,它会比第二个选项慢。
就性能而言,哪一个效率更高?为什么?
关系数据库被设计为每个表存储许多行。有很多机制可以简化大型表,例如:
将数据放在单个表中时,有一件事情比较困难,那就是安全性。而且,实际上,在某些情况下,这是一个主要问题,并且基本上需要将数据放在单独的表中。这些应用程序很少见,而且相差很远。
举例说明在多个表中存储数据有多糟糕,可以想象一下,在您的系统中,每个公司有一条记录,然后将其存储在一个表中。该记录存储有关公司的信息- 诸如名称,地址之类的信息。呼叫是100字节的信息。
在您的架构中,每个“公司”都有一个单独的表,因此每个表一行。该记录将驻留在一个数据页上。数据页可能为16 KB,因此您浪费了大约15.9 KB来存储此数据。存储1000条这样的记录占用了16 MB的空间,而不是大约7页(112 KB)。这可能会严重影响性能。
此外,使用多个表时,您无需考虑维护所有表以及确保不同表中数据正确性的挑战。维护更新需要应用于数千个表,而不是少数几个。