新手:一些SQL语句的含义

时间:2011-11-02 16:03:11

标签: mysql sql mysqldump

我正在使用 MySQL ,我有转储文件,其内容如下所示

TRUNCATE TABLE cars;

ALTER TABLE cars DISABLE KEYS;

INSERT INTO cars ...    ;

ALTER TABLE cars ENABLE KEYS;

OPTIMIZE TABLE cars

我想知道以下语句(来自上面的转储)分别做了什么:

1

ALTER TABLE cars DISABLE KEYS;

2

ALTER TABLE cars ENABLE KEYS;

第3

OPTIMIZE TABLE cars

3 个答案:

答案 0 :(得分:4)

DISABLE KEYS告诉mySQL在插入时不要更新索引。 ENABLE KEYS告诉它重新创建然后再次开始更新索引。最后,OPTIMIZE执行了许多操作,包括更新统计信息和排序索引页。这在大型插入/更新/删除后很重要。

上面的代码通常用于批量插入/更新。禁用索引有助于执行大型插入/更新/删除操作。

答案 1 :(得分:1)

ALTER TABLE ... DISABLE KEYS告诉MySQL停止更新非唯一索引。

然后

ALTER TABLE ... ENABLE KEYS应该用于重新创建缺失的索引。

如果删除了表的大部分,或者对具有可变长度行的表(具有VARCHAR,VARBINARY,BLOB或TEXT列的表)进行了许多更改,则应使用

OPTIMIZE TABLE

你是否懒得搜索谷歌?

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

答案 2 :(得分:0)

可以为MyISAM表显式激活此功能。 ALTER TABLE ... DISABLE KEYS告诉MySQL停止更新非唯一索引。然后应该使用ALTER TABLE ... ENABLE KEYS来重新创建缺失的索引。 MySQL使用一种比逐个插入密钥快得多的特殊算法来实现这一点,因此在执行批量插入操作之前禁用密钥应该会带来相当大的加速。使用ALTER TABLE ... DISABLE KEYS除了前面提到的权限外还需要INDEX权限。

here是来源