sql—尝试加速大型表上的mysql查询

kqhtkvqz  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我在mysql服务器上遇到了一些性能问题。
我正在尝试查询一个大表(约500k行)以获取数据子集:

SELECT * FROM `my_table` WHERE `subset_id` = id_value;

这个请求需要大约80ms才能实现,但是我试图查询它超过20k“id\u值”,这使得总执行时间几乎为1h。我想在上面加个索引 subset_id 这会有所帮助,但不会改变任何事情(理解索引的工作方式,这是有意义的)。
我想弄清楚的是,是否有任何方法可以将表“索引”为一种不需要80ms就可以执行这个查询的方式,而是更合理的方式?或者在其他工作中,查询500k行表的~80ms是“正常”的吗?
注意:从更大的Angular 来看,我正在使用并行查询和多个连接来加快进程,并尝试了各种优化来更改innodb\u缓冲区的大小。我也在考虑使用一个更大的对象来查询500k行的db,而不是20k*xx,但是我的代码是以多进程/协同例程/可伸缩的方式设计的,我试图避免这种情况,并将重点放在最低级别的query/mysql服务器的优化上。
谢谢!

gxwragnw

gxwragnw1#

使用单个查询 IN 而不是无数的查询:

SELECT *
FROM `my_table`
WHERE `subset_id` IN (id1, id2, . . .);

如果您的ID已经在一个表中——或者您可以将它们放在一个表中——那么就改用表。你还可以用 IN ```
SELECT *
FROM my_table
WHERE subset_id IN (SELECT id FROM idtable);

相关问题