我在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服务器的优化上。
谢谢!
1条答案
按热度按时间dy1byipe1#
使用单个查询
IN
而不是无数的查询:如果您的ID已经在一个表中——或者您可以将它们放在一个表中——那么就改用表。你还可以用
IN
```SELECT *
FROM
my_table
WHERE
subset_id
IN (SELECT id FROM idtable);