当表有索引的时候,delete from全表删除时,会删除索引吗?
我对一个几百万行数据的表,进行delete from全表删除后,再分批插入几百万行数据,发现很慢,要四五个小时以上
而truncate的话,则很快,10分钟左右
为何?
当表有索引的时候,delete from全表删除时,会删除索引吗?
我对一个几百万行数据的表,进行delete from全表删除后,再分批插入几百万行数据,发现很慢,要四五个小时以上
而truncate的话,则很快,10分钟左右
为何?
delete属于DML操作,个人理解是逐条删除记录,同时会更新索引(注意不是删除索引,全表删除操作后索引本身还是存在的)
truncate属于DDL操作,应该是直接更新了数据库的元数据,不需要每条删除,所以速度较快。
PS: 大批量插入数据,为提升速度一般会禁用所以的索引,等插入数据后再重建索引,如果想更快的话建议用sqlldr导入。
5 回答3.3k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
3 回答2k 阅读
1 回答3.6k 阅读
删除列就会把索引删除.
删除表也会删除.