小编0x8*_*x89的帖子

MySQL:delete...where..in() vs delete..from..join,并在删除时使用子选择锁定表

免责声明:请原谅我对数据库内部知识的缺乏。它是这样的:

我们运行一个应用程序(不是我们编写的),它在数据库的定期清理作业中存在很大的性能问题。查询如下所示:

delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in (
       select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY
       where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1");
Run Code Online (Sandbox Code Playgroud)

直截了当、易于阅读和标准 SQL。但不幸的是非常慢。解释查询显示VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_ID未使用现有索引:

mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in (
    ->        select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY
    ->        where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1");
| id | select_type        | table                 | type            | possible_keys                    | key     | key_len | ref  | rows    | Extra       |
+----+--------------------+-----------------------+-----------------+----------------------------------+---------+---------+------+---------+-------------+
|  1 | PRIMARY            | VARIABLE_SUBSTITUTION | ALL             | NULL                             | NULL    | NULL    | NULL | 7300039 …
Run Code Online (Sandbox Code Playgroud)

mysql index join delete optimization

9
推荐指数
2
解决办法
3940
查看次数

标签 统计

delete ×1

index ×1

join ×1

mysql ×1

optimization ×1