当表有索引的时候,delete from全表删除时,会删除索引吗?

当表有索引的时候,delete from全表删除时,会删除索引吗?

我对一个几百万行数据的表,进行delete from全表删除后,再分批插入几百万行数据,发现很慢,要四五个小时以上

而truncate的话,则很快,10分钟左右

为何?

阅读 14.4k
2 个回答

删除列就会把索引删除.
删除表也会删除.

delete属于DML操作,个人理解是逐条删除记录,同时会更新索引(注意不是删除索引,全表删除操作后索引本身还是存在的)
truncate属于DDL操作,应该是直接更新了数据库的元数据,不需要每条删除,所以速度较快。

PS: 大批量插入数据,为提升速度一般会禁用所以的索引,等插入数据后再重建索引,如果想更快的话建议用sqlldr导入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题