WEB开发网
开发学院数据库MySQL Schema的优化和索引 - 加速ALTER TABLE 阅读

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

 2009-09-02 00:00:00 来源:WEB开发网   
核心提示: 你可以不用重建表来做如下类型的操作:移除列的AUTO_INCREMENT属性, 添加,Schema的优化和索引 - 加速ALTER TABLE(2),移除,更改ENUM和SET, 为了做例子,我们给skila.film表的rating列添加一个常量,如果你移除了一个常量并且一些行包含这个值,查询

你可以不用重建表来做如下类型的操作:

移除列的AUTO_INCREMENT属性。

添加,移除,更改ENUM和SET。如果你移除了一个常量并且一些行包含这个值,查询语句返回这个值将会是空字符串

基本的技术就是创建一个.frm文件并且拷贝它到以存在表的.frm文件的位置。步骤如下:

创建一个空表,当然表布局必须是准确的。除了一些更改的项。

执行FLUSH TABLES WITH READ LOCK.这一步将关闭使用的所有的表并且防止了这些表被打开。

交换.frm文件。

执行UNLOCK TABLES释放读锁。

为了做例子,我们给skila.film表的rating列添加一个常量。当前的列如下:

mysql> SHOW COLUMNS FROM sakila.film LIKE 'rating';
+--------+------------------------------------+------+-----+---------+-------+
| Field  | Type                               | Null | Key | Default | Extra |
+--------+------------------------------------+------+-----+---------+-------+
| rating | enum('G','PG','PG-13','R','NC-17') | YES  |     | G       |       |
+--------+------------------------------------+------+-----+---------+-------+

我们添加一个PG-14到这列中。

mysql> CREATE TABLE sakila.film_new LIKE sakila.film;
mysql> ALTER TABLE sakila.film_new
    -> MODIFY COLUMN rating ENUM('G','PG','PG-13','R','NC-17', 'PG-14')
    -> DEFAULT 'G';
mysql> FLUSH TABLES WITH READ LOCK;

Tags:Schema 优化 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接