delete from table where id in(数万条记录)

yalan 2014-01-12 04:00:41
测试delete from table where id in(1,2,3)正常
但是
delete from table where id in(select id from table2)
就卡死了
select id from table2会返回至少5万条记录
该怎么优化这条语句呢?
...全文
21675 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yalan 2014-02-23
  • 打赏
  • 举报
回复
谢谢大家,学习了
ermuzi 2014-01-13
  • 打赏
  • 举报
回复
据说用where exists子查询可以提高检索速度,可以试试: delete from table1 a where exists(select 1 from table2 b where a.id=b.id)
十一路 2014-01-13
  • 打赏
  • 举报
回复
之所以会卡 是因为子查询的操作会铁定会创建临时表,当然创建内存临时表并不可怕 但是当你数据量大了以后,内存临时表的单表大小限制后,临时表会转换为写磁盘形式的物理内存表 这两个参数决定了你临时表的大小 tmp_table_size max_heap_table_size 你可以查看这两个状态状态的变化,看你数据库性语句是否有问题。 Created_tmp_disk_tables/Created_tmp_tables<5% 解决方法的话: 楼上说了,用join语法, 特定的情况才去用子查询
知道就是你 2014-01-13
  • 打赏
  • 举报
回复
知道就是你 2014-01-13
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
delete a from table1 a inner join table2 b on a.id=b.id
删除,修改,查询 使用 in 关键字,如果对应的值太多时,都会卡死的,建议使用inner join 替换in 。 替换详细用法,参加我的博客 :http://blog.csdn.net/jenminzhang/article/details/8861148
rucypli 2014-01-13
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
delete a from table1 a inner join table2 b on a.id=b.id
in子查询这个样的语句在mysql5.6之前一直是禁止使用的 效率极差 改成表连接的方式
ACMAIN_CHM 2014-01-12
  • 打赏
  • 举报
回复
delete a from table1 a inner join table2 b on a.id=b.id

56,802

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧