在mysql

时间:2017-12-29 05:46:38

标签: mysql query-optimization

我有一张如下表格,

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行。我在图像列中插入图像(SVG / JPEG)作为base64。

当我选择不同大小的插入列时,

4KB -> Loaded less than 1 sec

200KB -> 3 to 4 secs

500KB -> 8 secs

3MB   -> 30 to 50 secs

这是我的交易,我想在1到2秒内加载3MB文件。

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

我不确定将图像存储在MySQL中是一个好主意 - 它不是为存储文件或大文件而构建的。 为了避免这种模式,我建议将图像存储在Web服务器/云中,并将URL /文件名存储在数据库中,以供应用程序使用。

如果您想将图像存储在数据库中,我会考虑以下内容:

  1. 尝试不同的数据类型 - 如果将列类型更改为BLOB并保存二进制信息会发生什么?
  2. 检查网络连接 - 说起来容易。因此,我将首先在MySQL服务器上本地运行您的查询,而不是从其他服务器运行。这样,您可以避免网络延迟,看看哪个部分需要更长时间,通过网络传输图像或将其上传到数据库。