代码之家  ›  专栏  ›  技术社区  ›  Prashant Singh

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

  •  1
  • Prashant Singh  · 技术社区  · 11 年前

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

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

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

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

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

    enter image description here

    谢谢

    2 回复  |  直到 11 年前
        1
  •  1
  •   user149341 user149341    11 年前

    假设屏幕截图中看到的密钥都是你所拥有的,那么这里有问题的密钥是 query_id 作为一个300个字符的UTF8列,它最终只使用了900个字节。

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

    DROP INDEX query_id ON tablename
    CREATE INDEX query_id ON tablename (query_id, position, prod(100))
    
        2
  •  0
  •   ZIADI Mohamed ali    10 年前

    转换表之前,请调整其顺序,使主键列按顺序排列

    > ALTER TABLE tablename ORDER BY 'primary_key_column';
    

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

    > ALTER TABLE tablename ENGINE = INNODB;