0

对于是否将包含文本列的大型(数百 K 条记录)表分成 2 个表,有点进退两难。

有问题的表存储新闻文章:

CREATE TABLE `article` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `articleType` varchar(7) DEFAULT NULL,
  `dateCreated` datetime NOT NULL,
  `label` varchar(75) NOT NULL,
  `lastUpdated` datetime NOT NULL,
  `reporter` mediumint(8) unsigned NOT NULL,
  `text` text NOT NULL
  PRIMARY KEY (`id`),
  KEY `reporter-fk` (`reporter`),
  CONSTRAINT `reporter-fk` FOREIGN KEY (`reporter`) REFERENCES `reporter` (`id`)
)

因此,重要的是,在直接 SQL 中,当您想要获取头条新闻(最新消息)时,您将获取您想要的列(id、label、dateCreated)并排除您不想要的列(尤其是臃肿的文本列)

然而,在使用 ORM 时,会获取一个包含所有列的对象,因此抓取 50 篇最新文章会产生一些开销,也许不是很大,但足以让我有点畏缩。在编写直接 SQL 时,永远不要在这种情况下获取所有字段。

鉴于 ORM 的现实,我应该将文本列分成一个单独的相关表,还是不打扰,只需使用 ORM 抓取整个 enchilada 约定并在站点流量需要更高效的 2 表解决方案时担心它?

4

2 回答 2

1

通常,我说不要过早优化。

但是,在这种情况下,我现在将其打破,因为已经有这样做的论据。您可能正在显示文章标题列表而不显示正文。为什么不将正文放在与文章关联的自己的表/类中?

似乎文章标题和文章正文已经是两个独立的东西。

于 2012-04-18T13:56:13.450 回答
1

您使用的是特定的 ORM,还是自己开发的?如果您使用 Propel,请将列设置为延迟加载- 然后它将在显式请求时加载,而不是与对象的其余部分一起加载。如果没有,那么看看你的 ORM 是否支持这个,或者内置它。

于 2012-04-18T14:08:48.470 回答