在加索引的时候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.一对多的关联表可以添加冗余字段,如商品分类表 和商品表 ,在首页中需要显示每个分类商...
where与having非常类似.都能筛选数据.表达式完全一致. 但是职责的确不同.where负责对表中的字段进行筛选,having负责对where筛选后的结果集再次筛选。这也就是where不能使用别名字段来筛选的原因,因为数据中没有这个字段。&n...
例如我们需要查询商品表中每个分类中商品id最大的记录,并且显示商品价格以下是表结构:id catename title &nb...
Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表...
1.MyISAM 建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,.frm格式文件,存储表定义;.MYD格式文件,存储数据;MYI格式文件,存储索引;方便数据迁移,我只需将mysql安装目录下data文件中的表文件复制即可完成数据迁移,之前在搬迁多个dedecms中深有体会。 ...
由于在开发中不小心删除客户上传的商品数据,客户本身也不好说话,只好恢复数据库,记录下过程。原理是数据库开启bin-log功能,然后再通过备份的bin-log进行数据库恢复。先查找备份的数据库日志二进制文件。一般在mysql的data文件夹中,文件名大概为mysql-bin.00001,具体看文件的修...