gpt4 book ai didi

mysql - 很多表或行,在 SQL 中哪一个更高效?

转载 作者:IT老高 更新时间:2023-10-29 00:15:35 27 4
gpt4 key购买 nike

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

假设公司的数量是 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 - 很多表或行,在 SQL 中哪一个更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com