mysql - 在 mysql 中选择长文本列太慢

标签 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 行。我正在 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/文件名存储在数据库中,以供应用程序使用。

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

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

关于mysql - 在 mysql 中选择长文本列太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017998/

相关文章:

SQL Server : IF EXISTS massively slowing down a query

python - 避免多次查询多个计数

c# - 选择查询优化

php - 检查值是否已存在不起作用

php - 当有多个单选选择时,数据库不会用 PHP 更新?只有选择的最新 radio 才会更新

sql - 如何使用连接优化 postgresql 查询?

sql-server - 如何比较两个查询?

MySql优化group by时group by使用函数

php - Mysqli 到 foreach 内的数组;内部 foreach 与另一个 mysqli 数组无法正确读取外部数组中的值

php - 让mysql进行多次更新