MySQL获取时间优化

时间:2013-03-21 12:04:45

标签: mysql query-optimization database-performance

o我有一个包含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_size中的my.ini,但没有看到太多变化。
  2. 此外,我尝试将coord_x和coord_y设置为索引,但查询时间变慢。
  3. 该表由coord_x字段的范围划分,这给了我更好的结果。
  4. 如何缩短获取时间?是否可以将其减少到毫秒?

4 个答案:

答案 0 :(得分:13)

我也遇到了缓慢的提取问题(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以使其生效

参考:How to change value for innodb_buffer_pool_size in MySQL on Mac OS?

答案 1 :(得分:0)

如果我是对的,那么查询真的很快,但是从数据库中获取数据的速度很慢。从存储中加载170000个结果需要27秒。

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

要获得最高速度,您可以使用MEMORY引擎。唯一的缺点是,如果必须对其进行动态更改,则必须将该表的副本存储在另一个引擎中,并且在进行任何更改后,您必须重新加载差异或整个表。

此外,您必须创建一个在重新启动服务器时触发的脚本,以便在启动mysql服务器时加载内存表

See here for the doc

答案 2 :(得分:0)

我找到了一个修复程序,只需禁用系统中的AVG或任何反病毒,然后重新启动工作台

答案 3 :(得分:-1)

确保该行未写在您的pom.xml中。

<property name="hbm2ddl.auto">create</property>

如果已写入,则将其删除。