今天开发那边过来和我说他那边数据库无法提交数据,一直卡住

我查看了一下进程show processlist,发现有几条delete语句和insert语句,已经执行了6000多秒了,都是非常简单的语句

在RR模式下:

有几条语句:

alter table tbname drop primary key;  执行了6000多秒。

其他delete,insert操作也一直卡在哪里。

试验:

新建一个表:

CREATE TABLE TEST(

id int,

name varchar(20)

);

插入几条数据。

1、全表均无任何索引和主键。

语句:

DELETE FROM TEST WHERE ID = '1'

查看其执行计划后,发现扫描了全表。

2、name列增加索引,删除ID列:

DELETE FROM TEST WHERE ID = '1'

查看其执行计划后,发现扫描了全表。

3、name列增加索引,删除name列:

DELETE FROM TEST WHERE name = 'a'

查看其执行计划后,发现只扫描了一行数据,也就是说走了索引。

 

结论:

在删除或者更新的列上建立索引,否则会扫描全表。

mysql文档中查到:

删除和建立索引会对整张表进行重建操作。

alter table语句的算法有两种:

1、copy,将原表复制到临时文件中,然后修改完毕后再移动回原位。

2、in place。在原表上进行,会短暂锁定元数据。

一般来说:索引相关操作,更改列名,设置和删除列默认值,修改定义长度,更改自增量,这些操作不会涉及到重建表。

 

相关文章:

  • 2021-06-05
  • 2021-12-02
  • 2021-12-20
  • 2021-12-22
  • 2021-09-15
  • 2021-04-02
  • 2022-01-03
猜你喜欢
  • 2021-08-23
  • 2021-12-16
  • 2021-09-30
  • 2022-12-23
  • 2022-01-16
  • 2022-01-01
  • 2022-12-23
相关资源
相似解决方案