在加索引的时候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还不是卡很久,看来在建表时就要设计好。本次记录下添加索引不锁表的方法。晚上设置定时任务来执行转换。
1.定长和变长的分离 如int,char,time所占字节是固定的字段放在一张表 如varchar,text所占字节不确定的字段放在一张表中2.常用字段和不常用字段进行分离,根据查询频率来设计3.一对多的关联表可以添加冗余字段,如商品分类表 和商品表 ,在首页中需要显示每个分类商...
下面的是商品数据表,id是主键,catename是分类,titile是标题,price是价格,现在要求计算每种分类下的商品平均价格.id catename &n...
Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表...
1.查看所有表,包括视图表,show tables;2.查看表结果,包括视图表,desc 表名3.查看建表过程,show create table 表名;4.查看建视图过程,show create view...
触发器是一种特殊的事务,可以监听到Mysql的(insert/update/delete)的操作并触发相应的(insert/update/delete)操作. 触发器的创建主要有4个要素:(1).监听地点(...
1.很多人认为count查询非常快,但是在加上筛选条件那就是未必的了!测试:user表中4000w数据(1).SELECT count(*) from user; 用时0.00s (2).SELECT...