我有一个带有索引varchar(256)
列的表。
为了加快批量插入,我禁用了密钥,插入了超过1000万个条目,然后在插入完成后重新启用密钥。
令人惊讶的是,启用/禁用键花了很长时间:
mysql> alter table xxx disable keys; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> alter table xxx enable keys; Query OK, 0 rows affected, 1 warning (0.00 sec)
如何确保启用/禁用密钥正常工作?
答案 0 :(得分:6)
正如您所猜测的,InnoDB不支持DISABLE / ENABLE KEYS。你得到的警告是:
代码1031 - 表存储引擎 'table_name'没有此选项
正如您所见here。
要自行查看警告,请在运行SHOW WARNINGS;
后运行ALTER
。
答案 1 :(得分:2)
要检查您的密钥是否已启用/禁用,请运行:
show keys in table_name
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+ | table123 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | | table123 | 1 | id | 1 | id | A | NULL | NULL | NULL | | BTREE | disabled | | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
如果密钥已停用,则Comment
列会显示disabled
。如果已启用,则列将为空:
[
Comment
列显示]有关未在其自己的列中描述的索引的信息,例如disabled
如果索引被禁用。 ➫➫➫