我读到,如果 IN 条件中传递的参数数量很大,则最好创建临时表。这是针对选择查询的。这对于更新查询也适用吗?我有一个更新查询,它使用 3 个表联接(内联接)并在 IN 条件中传递 1000 个参数,并且该查询在循环中运行 200 次或更多次。执行此查询的最佳方法是什么?
最佳答案
IN
操作通常很慢。向任何查询传递 1000 个参数听起来很糟糕。如果你能避免这种情况,那就去做吧。现在,我真的想尝试一下临时表。您甚至可以使用表的索引。我的意思是,不要只是在其中添加值,而是使用可以帮助您优化搜索的索引。
另一方面,使用索引添加比不使用索引添加要慢。去那里进行经验测试。现在,我认为必须记住的是,在使用另一个表时,您不需要使用 IN
子句,因为您可以使用 EXISTS
子句通常会带来更好的性能。即:
select * from yourTable yt
where exists (
select * from yourTempTable ytt
where yt.id = ytt.id
)
我不知道你的查询,也不知道数据,但这会让你知道如何做到这一点。请注意,内部 select *
与 select aSingleField
一样快,因为数据库引擎对其进行了优化。
以上就是我的全部想法。但请记住,要 100% 确定什么最适合您的问题,没有什么比执行测试并计时更好的了:) 希望这会有所帮助。
关于mysql - IN MySQL 中更新操作的标准性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214120/