做网站公司 包含了服务器费用吗,自己学习做网站,wordpress 修改链接,网上购物系统流程图在需求上线过程中#xff0c;经常会往一个数据量比较大的数据表中的字段加索引#xff0c;一张几百万数据的表#xff0c;加个索引往往要几分钟起步。在这段时间内#xff0c;保证服务的正常功能运行十分重要#xff0c;所以需要线上无锁添加索引#xff0c;即加索引的语…在需求上线过程中经常会往一个数据量比较大的数据表中的字段加索引一张几百万数据的表加个索引往往要几分钟起步。在这段时间内保证服务的正常功能运行十分重要所以需要线上无锁添加索引即加索引的语句不加锁sql如下
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHMINPLACE, LOCKNONE;具体原理引用如下 ALGORITHMINPLACE 更优秀的解决方案在当前表加索引步骤 1.创建索引(二级索引)数据字典 2.加共享表锁禁止DML允许查询 3.读取聚簇索引构造新的索引项排序并插 入新索引 4.等待打开当前表的所有只读事务提交 5.创建索引结束
ALGORITHMCOPY 通过临时表创建索引需要多一倍存储还有更多的IO步骤 1.新建带索引主键索引的临时表 2.锁原表禁止DML允许查询 3.将原表数据拷贝到临时表 4.禁止读写,进行rename升级字典锁 5.完成创建索引操作
LOCKDEFAULT默认方式MySQL自行判断使用哪种LOCK模式尽量不锁表 LOCKNONE无锁允许Online DDL期间进行并发读写操作。如果Online DDL操作不支持对表的继续写入则DDL操作失败对表修改无效 LOCKSHARED共享锁Online DDL操作期间堵塞写入不影响读取 LOCKEXCLUSIVE排它锁Online DDL操作期间不允许对锁表进行任何操作