我有以下删除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)
或者至少你可以在状态字段上将它们连接起来。显然,索引状态字段是必须的。