在 mysql 中我有表
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;
在应用程序代码中,我通常只需要列出附件,但不需要获取其内容。因此,当我从该表中检索行时,我不希望浪费资源来服务“内容”字段。 棘手的部分是我使用执行“SELECT * FROMarticles_attachments”的自定义库,因此它查询以返回所有字段。
我可以轻松做的是覆盖 RowMapper(来自 Spring Jdbc)并且不映射“内容”字段(不调用 ResultSet.getBinaryStream)。
问题:这有助于避免资源浪费吗?...我不希望在检索 100 行附件表时打开 100 个流。
最佳答案
我做了几个测试,结果发现答案是“是的,如果结果查询包含 ~BLOB 类型的字段,即使您不调用 ResultSet.getBinaryStream,您也会浪费资源(特别是带宽)”。
我确实用以下方法测试了它:
- MySQL 5.6.20 和 MirandaDB 10.0.13
- mysql-connector-java-5.1.19-bin.jar
- HikariCP-java6-2.2.5.jar
关于java - 如果 ResultSet 可以用于 getBinaryStream() 但实际上却没有,是否开销太大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28128272/