老师您好, 关于批量删除的问题

来源:6-15 【实战】 外关联查询

你笑就好

2020-07-22

您的课程我看完了, 后期做项目的时候想到一个关于join优化的问题
您说过语句尽量用join语句, 可以用到索引

第一种:
删除若干条数据, 是直接delete from A表 where url=****, url是有多条数据的, 并且url这个字段上面有索引

第二种:
通过delete join语句

DELETE a FROM 
    A表 a
LEFT JOIN 
    (SELECT id FROM A表 WHERE url = "5f05737614195aa594fdbb2c") b
ON
    a.id=b.id
WHERE b.id IS NOT NULL

这两种EXPLAIN都用到索引了, 但是第二种, 过程查询了两次表

  1. 第一种方法是数据库一条一条删除么?
  2. 第二种方法比第一条要快么? 一次性提交事务我觉得比多次提交事务要快, 所以想听听老师的看法
  3. 如果把A表抽出一个公共表达式(CTE), 是否第二种方法比第一种方法快

忘了说了, Mysql的版本是8.0.15

老师辛苦

写回答

1回答

sqlercn

2020-07-22

如果能使用单表就没有必要非要使用join方式了。第一种方法也会删除所有满足条件的数据。以你的例子看第二条并不如第一条好。

1
1
你笑就好
非常感谢!
2020-08-16
共1条回复

零基础入门 详解企业主流数据库MySQL8.0

掌握SQL优化与慢查询优化,具备独当一面的能力

1641 学习 · 485 问题

查看课程