gpt4 book ai didi

sql - 一张有 100 列的大表 vs 很多小表

转载 作者:行者123 更新时间:2023-12-04 10:06:58 25 4
gpt4 key购买 nike

我创建了一些包含用户、评论、视频、照片、消息等的网站。所有数据都在一个包含 100 列的表中。我认为一个表比多个更好,因为用户只需要连接一个表,但我听说有些程序员不喜欢这种方法。有人能告诉我哪个更好吗?一张非常大的 table 或很多小 table 。
以及为什么我需要使用很多表?为什么它有用?哪个对用户来说速度快?
大表和很多小表的优缺点是什么?

最佳答案

在大多数情况下,单个表中的 100 列是糟糕的设计。

阅读此页:http://www.tutorialspoint.com/sql/sql-rdbms-concepts.htm

将您的数据分解成相关的块,并为每个块提供自己的表。

你说你有这些信息(用户、评论、视频、照片、消息),所以你应该有类似这些表格的东西。

  • 包含(用户 ID、姓名、电子邮件等)的用户
  • 包含(评论 ID、用户 ID、评论文本等)的评论
  • 包含(视频 ID、用户 ID、评论 ID、视频数据等)的视频
  • 照片,其中包含(照片 ID、用户 ID、评论 ID、照片数据等)
  • 包含(消息 ID、用户 ID、消息文本等)的消息

  • 然后,当您编写 SQL 时,您可以根据您需要的信息编写适当的 SQL 进行查询。
    SELECT UserID, MessageID, MessageText
    FROM Users as USR
    JOIN Messages as MSG
    on USR.UserID = MSG.UserID
    WHERE USR.UserID = 1234567

    对于您当前的查询,您必须处理包含您不需要或不关心的数据的行。

    编辑
    只是为了向 OP 提供更多信息,说明为什么这是更好的设计。

    让我们以“用户”为例。

    在适当的数据库设计中,您将有一个名为 Users 的表,其中包含用户存在所需的所有必需列。用户名、电子邮件、身份证号码等。

    现在我们要创建一个新用户,因此我们要插入用户名、电子邮件和 ID 号。但是等等,我仍然需要用与我们创建新用户的过程完全无关的信息填充其他 97 个列!即使您将 NULL 存储在所有列中,它也会使用数据库中的一些空间。

    还假设您有数百个用户都试图从单个数据库表中选择、更新和删除。表被锁定的可能性很高。但是如果你有一个用户更新用户表,另一个用户插入到消息表中,那么工作就会展开。

    正如其他用户所说,纯粹是性能。数据库需要获取所有信息并过滤掉您想要的信息。如果您有很多列,这是不必要的工作。

    性能示例。

    假设您的数据库已经运行多年。您有 5000 个用户、2,000,000 条评论、300,000 张图片、1,000,000 条消息。您的单个表现在包含 3,305,000 条记录。

    现在你想找一个ID为12345的用户,他拥有20多张图片。您需要搜索所有 3,305,000 条记录才能获得此结果。

    如果您采用拆分表设计,那么您只需搜索 305,000 条记录。

    明显的性能提升!!

    编辑 2

    性能测试。

    我创建了一个包含 200 万行和 1 列的虚拟表。我运行了以下查询,平均执行 10 次需要 120 毫秒。
    SELECT MyDate1 from dbo.DummyTable where MyDate1 BETWEEN '2015-02-15 16:59:00.000' and '2015-02-15 16:59:59.000'

    然后我截断了表并创建了另外 6 列,并用 200 万行测试数据填充它们并运行相同的查询。执行 10 次平均需要 210 毫秒。

    因此,即使您没有查看额外的数据,添加更多列也会降低性能。

    关于sql - 一张有 100 列的大表 vs 很多小表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549354/

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