MYSQL删除优化

MYSQL删除优化

我有以下删除SQL语句:

从表 1 w、表 2 r 中删除 w、r,其中(w.status=1 或 r.status=1)

show engine innodb status 显示以下内容。读取率(237.29 次读取/秒)是指过滤(where)条件后的读取吗?还是是指过滤之前的所有连接元素?这很重要,因为我正在尝试衡量完成查询所需的时间。两个表都很大,但过滤后的结果相对较小。

行操作
--------------
InnoDB 中有 1 个查询,队列中有 0 个查询
InnoDB 中打开 1 个读取视图
主线程进程号5163,id 1090357568,状态:等待服务器活动
插入行数 25005429,更新行数 1722842,删除行数 371088,读取行数 2176564571
0.00 插入/秒、0.00 更新/秒、0.00 删除/秒、237.29 读取/秒

答案1

是我错了还是您没有指定 w 和 r 的任何连接条件?这意味着您正在对两个表进行大型笛卡尔连接,这肯定会比 2 个删除查询(每个表一个)更长。

你难道没有一些东西使 w 和 r 相互关联吗,例如:

delete w,r 
from table1 w ,table2 r 
where (w.r_id=r.r_id) 
and (w.status=1 or r.status=1)

或者至少你可以在状态字段上将它们连接起来。显然,索引状态字段是必须的。

相关内容