SQL:在'一个表多列'和'多表多次查询'之间

时间:2013-02-26 15:25:03

标签: sql

我的网站有一个帖子系统,有三种类型的帖子

  1. 图片
  2. 视频
  3. 转播
  4. 我使用4个表来管理这些数据

    1. 发布
    2. 图片
    3. 视频
    4. 重新发布
    5. 发布到网站的每张图片,视频,重新发布都会有一个帖子行来保持帐号,评论等等。

      我必须查询评论的次数或删除的内容。

      我想知道

      之间
      1. 一个表,多列,多个空行,一次查询
      2. 多个表,少于空行,多次查询
      3. 哪一个更好更快?

4 个答案:

答案 0 :(得分:3)

与这些类型的问题一样,这个答案是“它取决于。”

我建议您尝试创建数据的VIEW,将4个表编译为单行,多列结果集。您甚至可以索引此视图,如果需要,还可以INSERT INTO视图。这可以让您更好地了解如何为数据建模。

在一个极端你有:

  • 需要多个索引的多个表(如果你想保持一切都好,就像它是一行一样)将需要更多的存储空间。
  • 但这也意味着您可以将数据表存储在不同的文件组和存储区域中,这样您更大,更昂贵的二进制数据就不会占用更昂贵的驱动器空间。

另一方面,你有: *一个表不需要连接,并且只需要它就可以了 *但是,当您添加更多帖子类型时,存储在一个文件文件组中并且不受控制地增长的负担

在中间的某个地方,你有(索引)观点。

答案 1 :(得分:2)

“哪一个更好更快?”

我认为任何一个选项都不会更好 - 一个表通常更快,多个表“更好”,因为它更容易维护而且不会导致重复数据。如果检索速度是您的主要关注点,那么可以证明一个表是合理的,否则我会坚持规范化 http://en.wikipedia.org/wiki/Database_normalization

即使有多个表,好的索引也会对检索速度产生巨大影响,而且正如其他人所说的那样可能值得考虑一个视图/存储过程来将数据整合在一起

答案 2 :(得分:2)

对此没有简单的答案。

如果您在多个表上拆分数据,那么您需要编写更复杂的SQL,但数据库管理员可以将每个表放在不同的磁盘上,这样加载数据会更快。

搜索性能不受此影响,因为索引可以放在不同的磁盘上。

所以这取决于数据库体系结构,数据量,索引以及如何将它们分配给磁盘以及数据库优化器是否会选择正确的策略。

答案 3 :(得分:1)

使用单个表,可以消除JOIN的开销,因此可能会更快。

但是,根据您的设置,您可以使用“查看”或“存储过程”将数据从不同的表中拉出来。这些可以提高JOIN的效率,因为可以缓存/优化查询执行计划