mysql - IN MySQL 中更新操作的标准性能

标签 mysql database-performance

我读到,如果 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/

相关文章:

html - Windows Server 2012 IIS 问题

php将变量传递到另一个页面

sql - 多个一对多连接同一张表的性能

mysql - MySql中存储过程可以调用truncate veiw table并向 View 表输入数据吗

mysql - ownCloud应用程序开发,在安装应用程序时填充数据库表

MongoDB 索引复杂度

mysql - 优化 InnoDB 插入查询

mysql - 在空数据库上解释计划 MySQL

来自 linux 终端的 mysql 转储在每个表的单独文件中

sql-server - 如果值相同,SQL Server 是否足够聪明,不会更新?