在加索引的时候100W数据加一个索引导致机器锁表,尤其机器配置只有2G需要时间较长,于是才了解到mysql也支持在线dll,以前只知道tidb支持。
添加索引的方式如下:
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
LOCK=NONE:允许并发的查询和DML操作
LOCK=SHARED:允许并发的查询,但阻塞DML操作
LOCK=DEFAULT: 由系统决定,允许尽可能多的并发性(并发查询、DML或两者)。如果省略LOCK子句相当于指定LOCK=DEFAULT
LOCK=EXCLUSIVE:阻塞并发查询和DML操作。
ALGORITHM=COPY:采用拷表方式进行表变更,与pt-osc/gh-ost类似;
ALGORITHM=INPLACE:仅需要进行引擎层数据改动,不涉及Server层;
然鹅在执行时提示我不支持INPLACE,建议我换为COPY,好吧,我改
然后再次执行时提示我不支持设置为NONE,只能设置DEFAULT,好吧没法玩了。
看了下阿里云的rds文档提示需要先转换为InnoDB引擎才能完全支持mysql的online dll
alter table tab_name engine=innodb;
但是我设置为InnoDB还不是卡很久,看来在建表时就要设计好。本次记录下添加索引不锁表的方法。晚上设置定时任务来执行转换。
例如我们需要查询商品表中每个分类中商品id最大的记录,并且显示商品价格以下是表结构:id catename title &nb...
我们从一个结果集中查询信息一般都是select * from (select...),每次都要编写from (select...)非常麻烦,于是我们将结果集保存起来,这就是视图的便利。创建视图的命令为:create view &nb...
项目和第三方系统对接,由于第三方开发人员属于兼职,数据库结构不一致的问题只能我来处理。此处文章用本地模拟演示。数据库资料:1号服务器: 账号root 密码root IP:127.0.0.1 数据库名称:data1 2号服务器...
海量表,数据量较大,并且每个字段的值具有唯一性。如果你创建的海量表只是数据多,索引是毫无意义的。构建海量时我们要使用存储过程。学习自韩顺平(1).创建一个测试数据库create database testdb;set names gbk;use testdb(2).创建dep...
项目中查询数据部分字段出现null,影响到了排序,但是由于没有数据库权限,还想将null转为其他值表示;例如现有表member的原始数据:SELECT * FROM memberid &n...
(1).下面是一张基本的会员表membermid name age 1 高峰 24 2 王小 19 3 韩星 24(2).下面是一张基本的会员日志表loglid ...