如何优化mysql查询包含“in”操作数?

时间:2012-01-05 06:19:18

标签: mysql

我有一个像

这样的查询
select * from logs where uid in (id1, id2, ...)

但是如果in()列表中有很多id,我担心性能,比如超过2000个id,即使根据explain的输出,这个语句确实在uid列上使用了索引。 我想知道是否有其他方法可以用这种条件查询它,或者如何对这个sql语句进行一些优化?

任何答案都表示赞赏。

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

2 个答案:

答案 0 :(得分:2)

2000项???哇!

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

答案 1 :(得分:0)

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

此外,该类的查询应该在MySQL中被广泛使用以加速某些类型的JOINS。查询结果很容易被查询缓存缓存,从而加快了网站上的重复连接速度(即将连接拆分为几个较小的查询时,其中一个查询的缓存结果会不断失效,但是其他相当稳定)。 IN运算符对操作数进行排序以减少随机索引读取。

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