当前位置: 首页 > 面试题库 >

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

向泽语
2023-03-14
问题内容

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

假设公司的数目为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’子句,它会比第二个选项慢。

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


问题答案:

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我正在尝试优化将数据插入MySQL的代码的一部分。我应该将INSERT链接起来以制作一个巨大的多行INSERT还是更快地使用多个单独的INSERT? 问题答案: https://dev.mysql.com/doc/refman/8.0/zh-CN/insert- optimization.html 插入行所需的时间由以下因素决定,其中数字表示近似比例: 连接:(3) 向服务器发送查询:

  • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

  • 将excel的大数据导入到MySQL数据库需要很长时间,那么如何提高性能呢? Excel数据喜欢以下内容: 学生表 床单课程 MySQL的表喜欢如下: 学生桌 资源表 图像的浅灰色区域可能会得到改善,但我不知道如何对其进行优化。使用 和字段确定行数据是否唯一<代码>参考id和表中的字段确定行数据是否唯一。

  • 问题内容: 要在数据库中搜索在任何列“ foo_desc”和“ bar_desc”中同时具有关键字“ foo”和“ bar”的行,我将执行以下操作: 要么 我希望最后一个查询的缺点是性能。 好的一面是,LIKE查询找到了“ MATGA AGAINST”找不到的“ xxfoo”。 哪一个是首选,还是有更好的解决方案? 问题答案: 更新资料 从表开始,表支持。 第一个 要 好得多。在 MyISAM 表

  • 问题内容: 我创建了一个SQL查询,该查询更新了一个表列,其中另一列=值 代码: 问题出在。如何使其使用这些ID更新列? 问候。 问题答案: 替换为

  • 我很难决定是使用视图还是临时表。 我有一个从程序中调用的存储过程。在SP中,我将一个长查询结果存储在一个临时表中,命名列并对该表进行另一个查询,将结果存储在labels或gridview中,然后删除临时表。我还可以将查询结果存储在一个视图中,并在该视图上进行查询。那么什么更好,或者在什么情况下我必须使用视图/临时表。 根据我的研究,一种观点具有以下优点:安全性,简单性和列名规范。我的临时桌子也满足