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

标签 mysql innodb myisam

由于MYISAM每次都会锁住整张表,所以我在考虑将我的MYISAM表转换成InnoDB。但是,INNODB 要求唯一键和主键在 767 字节以内。

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

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

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

这是描述我的表的屏幕截图

enter image description here

谢谢

最佳答案

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

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

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

关于mysql - 如果唯一键很长,将 MYISAM 表转换为 INNODB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899479/

相关文章:

mysql - 关于从某人关注的用户获取最新帖子的可扩展性问题 : two different implementations

mysql - MyISAM 上的全文索引,单列索引与多列索引

MySQL ORDER BY 取决于 CASE 顺序 ASC 或 DESC

mysql - 在 IFNULL 内连接

phpmyADMIN 还是 mySQL?我对 PHP 有点困惑

php - 限定 MONTHNAME 中的列

MySQL InnoDB 在 SELECT 上使用排他锁死锁(用于更新)

mysql - 哪种 MySQL 数据库引擎(MyISAM 与 InnoDB)适用于非常繁忙的表?

mysql表和删除策略

mysql - 如何将 MAIN mysql 数据库从 MyIsam 转换为 InnoDB