我有一个如下表,
CREATE TABLE `floor` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`floorName` varchar(20) NOT NULL,
`buildingId` bigint(11) NOT NULL,
`imageInString` longtext,
`image` longtext,
PRIMARY KEY (`id`),
KEY `fk_floor_1_idx` (`buildingId`),
CONSTRAINT `fk_floor_1` FOREIGN KEY (`buildingId`) REFERENCES `building` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;
表包含 20 行。我正在 image 列中以 base64 形式插入图像(SVG/JPEG)。
当我选择不同大小的插入列时,
4KB -> Loaded less than 1 sec
200KB -> 3 to 4 secs
500KB -> 8 secs
3MB -> 30 to 50 secs
这是我的处理,我想在 1 到 2 秒内加载 3MB 文件。
如何实现这一目标?
最佳答案
我不确定在 MySQL 中存储图像是否是一个好主意 - 它不是为存储文件或大文件而构建的。 为了避免这种模式,我建议将图像存储在 Web 服务器/云中,并将 URL/文件名存储在数据库中,以供应用程序使用。
如果您想将图像存储在数据库中,我会考虑以下内容:
- 尝试不同的数据类型 - 如果将列类型更改为 BLOB 并保存二进制信息,会发生什么情况?
- 检查网络连接 - 说起来容易做起来难。因此,我会首先在 MySQL 服务器上本地运行查询,而不是从其他服务器运行查询。这样,您可以避免网络延迟,并查看哪一部分需要更长的时间,通过网络传输图像或将其上传到数据库。
关于mysql - 在 mysql 中选择长文本列太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017998/