MySQL的提取时间优化(MySQL fetch time optimization)

2019-08-17 20:21发布

OI有2个百万登记的表格,但它会更很快康复增长。 基本上,这表包含与相应描述符的图像的兴趣点。 当我试图执行查询,其选择在空间上接近查询点分,总执行时间耗时过长。 更精确地持续时间/取= 0.484秒/ 27.441秒。 和查询是相当简单的,仅返回〜17000行。

我的查询是:

SELECT fp.fingerprint_id, fp.coord_x, fp.coord_y, fp.angle,
fp.desc1, fp.desc2, fp.desc3, fp.desc4, fp.desc5, fp.desc6, fp.desc7, fp.desc8, fp.desc9, fp.desc10,
fp.desc11, fp.desc12, fp.desc13, fp.desc14, fp.desc15, fp.desc16, fp.desc17, fp.desc18, fp.desc19,
fp.desc20, fp.desc21, fp.desc22, fp.desc23, fp.desc24, fp.desc25, fp.desc26, fp.desc27, fp.desc28,
fp.desc29, fp.desc30, fp.desc31, fp.desc32
FROM fingerprint fp 
WHERE 
fp.is_strong_point = 1 AND 
(coord_x BETWEEN 193-40 AND 193+40) AND (coord_y BETWEEN 49-15 AND 49+15 ) 
LIMIT 1,1000000;

这就是我所做的。

  1. 我试图改变key_buffer_sizemy.ini ,却没有看到太大的变化。
  2. 此外,我已经试过设置coord_x和coord_y作为索引,但查询的时间越来越慢。
  3. 该表是由一系列coord_x领域,这给了我更好的结果划分。

我怎样才能减少提取时间? 是否有可能将其降低到毫秒?

Answer 1:

如果我是正确的查询是非常快,但什么是慢的是从你的数据库中的数据读取。 它需要27秒内从你的存储负载的17万个结果。

它看起来像你使用了错误的数据库类型。 尝试从一个数据库引擎切换表到另一个。

为了获得最大的速度,你可以使用MEMORY引擎。 唯一的缺点是,你必须是表的副本存储在另一个引擎,如果你必须做的,它的动态变化和更改之后,你将不得不重新加载差异或整个表格。

你也必须在重新启动服务器,以使该触发一个脚本,这样你的记忆表将在你的mysql服务器启动时加载

看到这里的文档



Answer 2:

我面对缓慢取问题太(MySQL的InnoDB的)。 最后,我发现,innodb_buffer_pool_size默认情况下,我的系统是不够的,处理查询设置为8MB。 它增加至1GB后,性能似乎罚款:

                    Duration / Fetch
353 row(s) returned 34.422 sec / 125.797 sec (8MB innodb buffer)
353 row(s) returned 0.500 sec / 1.297 sec (1GB innodb buffer)

更新:

要innodb_buffer_pool_size更改添加到您的my.cnf

innodb_buffer_pool_size=1G

重新启动你的mysql,使其效果

参考: 如何在Mac OS改变MySQL的innodb_buffer_pool_size价值?



文章来源: MySQL fetch time optimization