1

由于MYISAM每次都会锁定完整的表,我正在考虑将我的MYISAM表转换为InnoDB。但是,INNODB 要求唯一键和主键在 767 字节内。

所以,我收到了这个错误:-

#1071 - Specified key was too long; max key length is 767 bytes 

我的唯一键有点长。那么,我将表转换为 INNODB 的最佳方法是什么?

这是描述我的桌子的屏幕截图

在此处输入图像描述

谢谢

4

2 回答 2

1

假设您在屏幕截图中看到的键就是您所拥有的,那么这里有问题的键是query_id. 作为 300 个字符的 UTF8 列,它最终仅使用 900 个字节。

您需要将索引限制为该列的一部分——比如说,可能是前 100 个字符?

DROP INDEX query_id ON tablename
CREATE INDEX query_id ON tablename (query_id, position, prod(100))
于 2013-04-11T04:33:17.213 回答
0

在转换表之前,调整其顺序,使主键列有序

> ALTER TABLE tablename ORDER BY 'primary_key_column';

这将预先排列表格,以便可以快速转换它,而无需在 MySQL 中进行大量重新排列。然后,只需更改表引擎:

> ALTER TABLE tablename ENGINE = INNODB;
于 2014-02-11T21:51:54.090 回答