2012-02-09 37 views
0

我读过如果在IN标准中传递的参数数量很大,创建一个临时表最好。这是用于选择查询。这是否适用于更新查询?我有一个更新查询,它使用3个表连接(内连接)并在IN标准中传递1000个参数,并且此查询在循环中运行200次或更多次。哪个是执行此查询的最佳方法?IN在MySQL中更新操作的标准性能

回答

1

IN操作通常很慢。将1000个参数传递给任何查询听起来都很糟糕。如果你能避免这种情况,那就去做吧。现在,我真的会喜欢临时表。你甚至可以玩桌子的索引。我的意思是,不要只是在其中添加值,而是使用可帮助您优化搜索的索引。

另一方面,添加索引比添加索引慢。去那里进行经验测试。现在,我认为是必须的,请记住,在使用另一个表时,不需要使用IN子句,因为可以使用EXISTS子句,这通常会带来更好的性能。我:

select * from yourTable yt 
where exists (
    select * from yourTempTable ytt 
    where yt.id = ytt.id 
) 

我不知道你的查询,也不知道数据,但那会给你一个关于如何去做的想法。请注意,内部select *select aSingleField一样快,因为数据库引擎会优化它。

这些都是我的想法。但请记住,为了100%确定最适合您的问题,最好不要进行这两种测试并计时。希望得到这个帮助。

+0

感谢您的帮助莫斯迪。我必须尝试这个。 – 2012-02-10 06:08:59

+0

欢迎@Ebbu! – 2012-02-10 06:10:59