我有一个像
这样的查询select * from logs where uid in (id1, id2, ...)
但是如果in()列表中有很多id,我担心性能,比如超过2000个id,即使根据explain的输出,这个语句确实在uid列上使用了索引。 我想知道是否有其他方法可以用这种条件查询它,或者如何对这个sql语句进行一些优化?
任何答案都表示赞赏。
补充:表格式是myisam,由于某种原因,我无法更改存储引擎。
答案 0 :(得分:2)
2000项???哇!
建议: 将2000个项目写入表格,并进行内部联接,而不是“在(...)”中的“uid”
答案 1 :(得分:0)
我已经在上面的评论中提到了类似问题的链接。
此外,该类的查询应该在MySQL中被广泛使用以加速某些类型的JOINS。查询结果很容易被查询缓存缓存,从而加快了网站上的重复连接速度(即将连接拆分为几个较小的查询时,其中一个查询的缓存结果会不断失效,但是其他相当稳定)。 IN
运算符对操作数进行排序以减少随机索引读取。
你唯一应该关心的是将int作为int而不是字符串传递,以便操作数被正确排序。