如果唯一键很长,则将MYISAM表转换为INNODB

时间:2013-04-09 10:28:33

标签: mysql innodb myisam

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

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

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

我独特的钥匙有点冗长。那么,将表格转换为INNODB的最佳方式是什么?

以下是描述我的表格的截图

enter image description here

谢谢

2 个答案:

答案 0 :(得分:1)

假设屏幕截图中显示的密钥都是您所拥有的,那么此处的密钥是query_id。作为一个300字符的UTF8列,它最终只使用900个字节。

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

DROP INDEX query_id ON tablename
CREATE INDEX query_id ON tablename (query_id, position, prod(100))

答案 1 :(得分:0)

在转换表格之前,请调整其顺序,以便主键列按顺序

> ALTER TABLE tablename ORDER BY 'primary_key_column';

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

> ALTER TABLE tablename ENGINE = INNODB;