如何优化mysql查询包含;在;操作数?

如何优化mysql查询包含;在;操作数?,mysql,Mysql,我有一个类似的问题 select * from logs where uid in (id1, id2, ...) 但是如果in()列表中有很多ID,比如说超过2000个ID,那么我担心性能,即使根据explain的输出,该语句也会在uid列上使用索引。 我想知道是否有其他方法可以用这种条件查询它,或者如何对这个sql语句进行优化 任何答复都将不胜感激 补充:表格格式是myisam,由于某种原因,我无法更改存储引擎。2000项?!?哇 建议: 将2000个项目写入表中,并进行内部联接,而不是“

我有一个类似的问题

select * from logs where uid in (id1, id2, ...)
但是如果in()列表中有很多ID,比如说超过2000个ID,那么我担心性能,即使根据explain的输出,该语句也会在uid列上使用索引。 我想知道是否有其他方法可以用这种条件查询它,或者如何对这个sql语句进行优化

任何答复都将不胜感激

补充:表格格式是myisam,由于某种原因,我无法更改存储引擎。

2000项?!?哇

建议:
将2000个项目写入表中,并进行内部联接,而不是“where uid in(…)”

我已经在上面的评论中提到了一个类似问题的链接

此外,这种查询应该在MySQL中大量使用,以加速某些类型的连接。查询缓存可以轻松缓存查询结果,从而加快站点上的重复连接(即将连接拆分为几个较小的查询,其中一个查询的缓存结果不断失效,但另一个查询相当稳定)。中的
运算符对操作数进行排序,以减少随机索引读取


您真正应该关心的唯一一件事是将int作为int而不是字符串传递,以便正确排序操作数

您对此有问题吗?如果()中的ID在某些条件下来自另一个表,您可以使用join。如果uid来自任意的用户输入,我认为您对此无能为力it@andreas是的,ID来自另一个数据源。如果我将它们分为“uid=id1或uid=id2或…”会有帮助吗?@SergioTulentsev还没有,我将用2000个ID对这种情况进行测试。它有实质性的不同吗?每个请求的uid都不同,插入临时表会花费很多吗?