科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Schema的优化和索引 - 加速ALTER TABLE3

Schema的优化和索引 - 加速ALTER TABLE3

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Schema的优化和索引 - 加速ALTER TABLE

作者:ddvip 来源:ddvip 2009年12月22日

关键字: Schema PHP MySQL

  • 评论
  • 分享微博
  • 分享邮件

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章