扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Schema的优化和索引 - 加速ALTER TABLE3
注意一下我们实在最后添加这个PG-14的,而不是在中间,那样做的话就会修改现有的值了,R值变为PG-14,NC-17变为R依此类推。
现在连交换.frm文件,操作系统命令如下
root:/var/lib/mysql/sakila# mv film.frm film_tmp.frm
root:/var/lib/mysql/sakila# mv film_new.frm film.frm
root:/var/lib/mysql/sakila# mv film_tmp.frm film_new.frm
在回到MySQL提示符,我们要解锁,再来看看更改的结果。
mysql> UNLOCK TABLES;
mysql> SHOW COLUMNS FROM sakila.film LIKE 'rating'G
*************************** 1. row ***************************
Field: rating
Type: enum('G','PG','PG-13','R','NC-17','PG-14')
最后一步要做的就是删除我们已创建的表。
mysql> DROP TABLE sakila.film_new;
快速的创建MyISAM索引
高效的读取MyISAM表一般的技巧是,关闭键,读取数据,重新启用键。
mysql> ALTER TABLE test.load_data DISABLE KEYS;
-- load the data
mysql> ALTER TABLE test.load_data ENABLE KEYS;
这样可以工作的原因是MyISAM延迟了创建键值直到数据读取之后,重要的是,它可以有序的创建索引。结果就非床快并且无碎片和压缩的索引树。
不过,对于唯一索引这种方法就不行了。因为DISABLE KEYS仅仅应用于非唯一的索引。MyISAM在内存中创建唯一索引并且读取每一行来校验唯一性。一旦索引大小超出了内存大小,读取会极度缓慢。
前一部分所说的ALTER TABLE的技巧,可以加速这个过程,前提是你需要多做一点工作和承担一部分风险。这对于备份来说很有用。比如,当你发现所有的数据是无效的并且不需要做唯一性检查。
你需要做的步骤如下:
创建一个期望的表。但是不要有任何的索引。
读取数据来创建MYD文件。
创建另一个空表,这次要包含索引。这会创建.frm和.MYI文件。
用个读锁来刷新表。
对第二个表的.frm和.MYI进行重命名。因此MySQL会把它们当作第一个表使用。
释放读锁。
使用REPAIR TABLE来创建表的索引。会以排序的方式创建索引,包括了唯一索引。
这个方法对于大表来说,速度格外的快。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者