1

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

  1. 图片
  2. 视频
  3. 转发

我使用 4 个表来管理这些数据

  1. 邮政
  2. 图片
  3. 视频
  4. 转发

发布到网站的每张图片、视频、转发都会有一个帖子行来保存点赞数、评论数等。

我必须查询评论被点赞或删除了多少次。

我想知道之间

  1. 一表多列多空行一次查询
  2. 多表,少空行,多次查询

哪个更好更快?

4

4 回答 4

3

与这些类型的问题一样,这个答案是“视情况而定”。

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

在一个极端,你有:

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

而在另一个极端,你有: * 一个不需要连接的表,并且那里有它需要的所有东西 * 但是有存储在一个文件文件组中并且随着你添加更多帖子类型而无法控制地增长的负担

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

于 2013-02-26T15:31:59.023 回答
2

对此没有简单的答案。

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

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

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

于 2013-02-26T15:35:06.330 回答
2

“哪一个更好更快?”

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

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

于 2013-02-26T15:32:22.323 回答
1

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

但是,根据您的设置,您可能可以使用视图或存储过程将不同表中的数据拉到一起。这些将提高 JOIN 的效率,因为可以缓存/优化查询执行计划

于 2013-02-26T15:28:23.927 回答