8

o我有一个包含 200 万个寄存器的表,但它会很快增长。基本上,该表包含具有相应描述符的图像的兴趣点。当我尝试执行选择在空间上靠近查询点的点的查询时,总执行时间太长了。更准确地说,持续时间/获取 = 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 字段的范围进行分区,这给了我更好的结果。

如何减少获取时间?是否有可能将其减少到毫秒?

4

5 回答 5

18

我也遇到了缓慢的获取问题(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 的值?

于 2013-11-01T05:02:40.577 回答
0

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

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

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

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

请参阅此处获取文档

于 2013-03-21T12:15:36.693 回答
-1

增加我的缓冲区大小使我的查询更快。但是您需要将 my.ini 文件以 notepad++ 的形式打开,因为如果您以记事本的形式打开它,它会包含一些十六进制数据。

于 2021-10-29T08:16:55.670 回答
-2

确保该行没有写在你的 pom.xml 中。

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

如果它被写入而不是删除它。

于 2020-03-05T13:13:03.740 回答
-2

我找到了一个修复方法,只需禁用您的 AVG 或系统中的任何抗病毒药物,然后重新启动您的工作台

于 2019-11-09T10:11:48.427 回答