由于MYISAM每次都会锁定完整的表,我正在考虑将我的MYISAM表转换为InnoDB。但是,INNODB 要求唯一键和主键在 767 字节内。
所以,我收到了这个错误:-
#1071 - Specified key was too long; max key length is 767 bytes
我的唯一键有点长。那么,我将表转换为 INNODB 的最佳方法是什么?
这是描述我的桌子的屏幕截图
谢谢
假设您在屏幕截图中看到的键就是您所拥有的,那么这里有问题的键是query_id
. 作为 300 个字符的 UTF8 列,它最终仅使用 900 个字节。
您需要将索引限制为该列的一部分——比如说,可能是前 100 个字符?
DROP INDEX query_id ON tablename
CREATE INDEX query_id ON tablename (query_id, position, prod(100))
在转换表之前,调整其顺序,使主键列有序
> ALTER TABLE tablename ORDER BY 'primary_key_column';
这将预先排列表格,以便可以快速转换它,而无需在 MySQL 中进行大量重新排列。然后,只需更改表引擎:
> ALTER TABLE tablename ENGINE = INNODB;