试图加快大型表上的mysql查询速度



我在Mysql服务器上遇到了一些性能问题。

我正试图在一个大表(约500k行(中查询一个子集数据:

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

这个请求需要大约80ms才能实现,但我试图在20k以上的"id_value"上查询它,这使得总执行时间几乎为1h。我一直认为在subset_id上添加索引会有所帮助,但这并没有改变任何事情(理解索引的工作原理是有意义的(。

我想弄清楚的是,是否有任何方法可以对表进行"索引"——执行这个查询不需要80毫秒,而是更合理的方法?或者在其他工作中,查询500k行表的~80ms是否"正常"?

注意:从更大的角度来看,我使用并行查询和多个连接来加快进程,并尝试了各种优化来更改innodb_buffer的大小。我还考虑使用一个更大的对象在数据库中查询500k行,而不是20k*xx,但我的代码是以多处理/协同例程/可扩展的方式设计的,我试图避免这种情况,并专注于在最低级别优化查询/mysql服务器。

谢谢!

将单个查询与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);

最新更新