我在Mysql服务器上遇到一些性能问题。
我正在尝试查询大表(约50万行)的数据子集:
SELECT * FROM `my_table` WHERE `subset_id` = id_value;
此请求大约需要80毫秒才能实现,但是我试图通过20k“ id_value”来查询它,这使得总执行时间将近1h。
我希望在subset_id
上添加索引会有所帮助,但这并没有任何改变(了解索引的工作原理,这很有意义)。
我要弄清楚的是,是否有某种方法可以以“不需要” 80ms的时间来执行该查询,但是可以更合理地“索引”表? 或者在其他工作中,查询50万行表是否“正常”大约80毫秒?
注意:在大图上,我正在使用并行查询和多个连接来加速该过程,并尝试了各种优化来更改innodb_buffer的大小。我还考虑使用更大的对象一次查询数据库以获取500k行而不是20k * xx,但是我的代码以多进程/协同例程/可扩展的方式设计,因此我试图避免这种情况并着重于优化查询/ mysql服务器处于最低级别。
谢谢!
答案 0 :(得分:1)
对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);