表有大约800万行.X有一个非唯一索引.
显示索引,它表明在表中键名X上有一个非唯一索引,其中"seq_in_index"为1,排序规则A,基数7850780,sub_part为NULL,打包为NULL,index_type为BTREE.
但是,此查询可能需要5秒才能运行.int的列表来自另一个系统,我不允许将它们存储在一个表中,因为它们代表了社交网络上的友谊.
有没有比大规模IN声明更快的方法?
您可以将ID列表转换为临时表(或表-var,如果MySql支持它们)并加入它.
该表只会与查询一样长,因此您实际上并未在表中存储任何内容.
您可以尝试将它们存储在临时表中.这个表不会永久存储在数据库中,我认为最终的连接(假设您也将索引临时表)会更快,因为它能够并行处理索引而不必进行索引查找对于IN子句中的每个int.当然,如果MySQL知道它将使用索引,那么它可能会优化IN子句并执行相同的操作,因此它实际上可能无法获得任何东西.我会尝试一下,看看它是否更快.