如果 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
在 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