请教mysql innodb下delete操作巨慢的情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教mysql innodb下delete操作巨慢的情况相关的知识,希望对你有一定的参考价值。

您好,我觉得删除操作巨慢的原因可能有以下几个:
1、删除的条件判断占用了很久,比如删除的条件用不到任何索引且不是主键。
2、删除的表中建立了索引而且数据量比较大,每次删除都要更新很多索引信息。
3、可能单纯的删除的数据量比较大。
4、可能数据库同时在执行其他消耗很大的操作。
参考技术A 1。你的使用的命令没有错。2。确定你的mysql还能不能正常使用。3。很可能,你在修改时,不小心所配置文件中的某个设置给改动了。

MySQL DELETE语句和TRUNCATE TABLE语句的区别

参考技术A 在逻辑上truncate
table和delete语句都可以删除表里面所有数据,但是在一些情况下有些不同:
对于InnoDB表
1,如果没有外键关联,innodb执行truncate是先drop
table(原始表),再创建一个跟原始表一样空表,速度要远远快于delete逐条删除行记录。
2,如果使用innodb_file_per_table参数,truncate
table
能重新利用释放的硬盘空间,在InnoDB
Plugin中,truncate
table为自动回收,如果不是用InnoDB
Plugin,那么需要使用optimize
table来优化表,释放空间。
3,表有外键关联,truncate
table删除表数据为逐行删除,如果外键指定级联删除(delete
cascade),关联的子表也会会被删除所有表数据。如果外键未指定级联(cascde),truncate
table逐行删除数据,如果是父行关联子表行数据,将会报错。
4,auto_increment计数器在truncate
table后会重置为0.与是否有外键关联没有关系。

以上是关于请教mysql innodb下delete操作巨慢的情况的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中的子查询等操作

mysql数据库相关整理

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL -- Innodb中的change buffer

请教一下mysql 行锁命令是啥?