2

我有以下表结构:

EVENT_ID(INT)    EVENT_NAME(VARCHAR)    EVENT_DATE(DATETIME)    EVENT_OWNER(INT)

我需要添加EVENT_COMMENTS应该是文本字段或非常大的字段VARCHAR

我有 2 个地方可以查询此表,一个位于列出所有事件的页面上(在该页面中,我不需要显示 event_comments 字段)。

另一个页面加载特定事件的所有详细信息,我需要在该页面上显示 event_comments 字段。

我应该为该事件创建一个带有 event_id 和 event_comments 的额外表吗?或者我应该在当前表中添加该字段吗?

换句话说,我要问的是,如果我的表中有一个文本字段,但我没有SELECT,它会影响对我的表的查询性能吗?

4

6 回答 6

2

向表中添加字段会使其更大。

这意味着:

  • 表扫描将花费更多时间
  • 更少的记录将适合页面并因此进入缓存,从而增加缓存未命中的风险

但是,使用连接选择此字段将花费更多时间。

因此,将此字段添加到此表中将使不选择它的查询运行得更慢,而选择它的查询运行得更快。

于 2011-01-26T14:08:53.333 回答
1

是的,它会影响性能。至少,根据昨天发表的这篇文章。

根据它,如果您不想遭受性能问题,最好将它们放在单独的表中并在需要时加入它们。

这是相对部分:

尝试限制表中的列数。与只有几列相比,表中的列过多会使查询的扫描时间长得多。此外,如果您有一个包含许多通常不使用的列的表,那么您也会使用 NULL 值字段浪费磁盘空间。对于可变大小字段(例如文本或 blob)也是如此,其中表大小可能会增长得比需要的大得多。在这种情况下,您应该考虑将其他列拆分到不同的表中,并在记录的主键上将它们连接在一起

于 2011-01-26T14:07:39.963 回答
0

你应该放在同一张桌子上。

于 2011-01-26T14:06:30.010 回答
0

是的,它可能会影响同一张表上的其他查询,无论如何您都应该这样做,因为您可能不在乎。

根据引擎的不同,blob 可以内联存储 (MyISAM)、部分离页 (InnoDB) 或完全离页存储(在某些情况下为 InnoDB 插件)。

这些有可能减少每页的行数,因此增加 IO 操作的数量以满足某些查询。

但是,您不太可能在乎,因此无论如何您都应该这样做。这个表有多少行?10^9 ? 其中有多少具有 blob 的非空值?

于 2011-01-26T14:09:10.087 回答
0

它不应该受到太大影响,但如果您担心性能,您应该始终运行一些基准测试并在查询上运行EXPLAIN以查看真实效果。

于 2011-01-26T14:09:17.840 回答
0

您预计会有多少活动?

很有可能,如果您没有成千上万的事件,那么无论如何您的表现都会很好。

于 2011-01-26T14:18:32.030 回答