如果 ResultSet 可以用于 getBinaryStream() 而不是,开销是否太大?

Is it too much overhead if ResultSet could be used to getBinaryStream() but wasn't to?

在 mysql 我有 table

CREATE  TABLE `articles_attachments` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(200) NOT NULL ,
  `size` BIGINT NOT NULL ,
  `article_id` BIGINT NOT NULL ,
  `contents` LONGBLOB NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `id_UNIQUE` (`id` ASC) ,
  UNIQUE INDEX `unique_file` (`article_id` ASC, `name` ASC),
  INDEX `fk_article` (`article_id` ASC)
) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;

在应用程序代码中,我经常需要只列出附件,而不是获取它们的内容。因此,当我从 table 检索行时,我不想浪费资源来服务 "content" 字段。 棘手的部分是我使用执行 "SELECT * FROM articles_attachments" 的自定义库,因此它查询 return 所有字段。

我可以轻松做到的是覆盖 RowMapper(来自 Spring Jdbc)并且不映射 "content" 字段(不调用 ResultSet.getBinaryStream) .

问题:这是否有助于避免资源浪费?...我不想在检索 100 行附件时打开 100 个流 table .

我做了几个测试,结果答案是 "Yes, you waste resources (specifically bandwidth) if resulting query contains fields of ~BLOB type even if you don't call ResultSet.getBinaryStream"。

我确实测试过它:

  • MySQL 5.6.20 & MirandaDB 10.0.13
  • mysql-连接器-java-5.1.19-bin.jar
  • HikariCP-java6-2.2.5.jar