MySQL创建索引错误
问题是为表“visions\u visit”(Django-visit应用程序)创建索引,因为每个查询至少持续60毫秒,而且会变得更糟 它返回:MySQL创建索引错误,mysql,django,indexing,Mysql,Django,Indexing,问题是为表“visions\u visit”(Django-visit应用程序)创建索引,因为每个查询至少持续60毫秒,而且会变得更糟 它返回: ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes 怎么办?屏幕截图上显示了表格的结构。请参阅您的问题下方评论中已回答的可能重复问题的参考。或者我应该说一个规范的重复目标来结束这个问题,如果它真的结束了。也就是说,在存储引擎或字符集方面,该参考文献
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
怎么办?屏幕截图上显示了表格的结构。请参阅您的问题下方评论中已回答的可能重复问题的参考。或者我应该说一个规范的重复目标来结束这个问题,如果它真的结束了。也就是说,在存储引擎或字符集方面,该参考文献中没有太多内容 在本例中,字符集与复合索引中字符串类型列的使用有关 旁注当然是性能。总的来说,不要期望你所尝试的会是一个伟大的。你们的索引太宽了,甚至可能并没有预期的用途。指数及其好处需要仔细审查。这可以通过使用mysql
explain
来确定。特别见一般性意见一节
请看下面的文章,下面是摘录
字符限制取决于您使用的字符集。例如
如果使用latin1,那么可以索引的最大列是
varchar(767),但如果使用utf8,则限制为varchar(255)。
每个索引还有一个单独的3072字节限制。767字节限制
是每列,因此可以包含多个列(每个767字节或
较小)每个索引最多3072个总字节,但列长度不超过
767字节。(MyISAM有点不同,它有一个1000字节的索引
长度限制,但在此范围内没有单独的列长度限制)。一个
这些限制的解决方法是只索引较长的前缀
列,但如果要索引超过767字节的列呢
在InnoDB中?在这种情况下,您应该考虑使用NoNdBasLARGEY前缀,
它是在MySQL 5.5.14中引入的,允许您包含列
InnoDB索引中最多3072字节长。它不影响索引
限制,仍然是3072字节
另请参见Mysql手册页面的最小值和最大值部分请参见您的问题下方评论中已回答的可能重复问题的参考。或者我应该说一个规范的重复目标来结束这个问题,如果它真的结束了。也就是说,在存储引擎或字符集方面,该参考文献中没有太多内容 在本例中,字符集与复合索引中字符串类型列的使用有关 旁注当然是性能。总的来说,不要期望你所尝试的会是一个伟大的。你们的索引太宽了,甚至可能并没有预期的用途。指数及其好处需要仔细审查。这可以通过使用mysql
explain
来确定。特别见一般性意见一节
请看下面的文章,下面是摘录
字符限制取决于您使用的字符集。例如
如果使用latin1,那么可以索引的最大列是
varchar(767),但如果使用utf8,则限制为varchar(255)。
每个索引还有一个单独的3072字节限制。767字节限制
是每列,因此可以包含多个列(每个767字节或
较小)每个索引最多3072个总字节,但列长度不超过
767字节。(MyISAM有点不同,它有一个1000字节的索引
长度限制,但在此范围内没有单独的列长度限制)。一个
这些限制的解决方法是只索引较长的前缀
列,但如果要索引超过767字节的列呢
在InnoDB中?在这种情况下,您应该考虑使用NoNdBasLARGEY前缀,
它是在MySQL 5.5.14中引入的,允许您包含列
InnoDB索引中最多3072字节长。它不影响索引
限制,仍然是3072字节
另请参见Mysql手册页面的最小值和最大值部分正确的答案是缩短字段和/或使其正常化 你真的有200个字符长的应用程序、模型等吗?如果没有,请缩短字段 可能
模型
在表中重复了很多次?如果是这样,请对其进行规范化,并用规范化后的id
替换该列
你似乎在使用MyISAM;你也可以(应该)切换到InnoDB。这将更改错误消息,或者可能使其消失
您是否使用utf8字符?你用英语做每件事吗?更改字符集可以使200个字符表示200字节,而不是600(utf8)或800(utf8mb4)
更改ip\u地址的字符集将使其占用空间从15*(字节/字符)缩减。从CHAR
更改为VARCHAR
也是如此。还要注意,15不足以处理IPv6。正确的答案是缩短字段和/或使其正常化
你真的有200个字符长的应用程序、模型等吗?如果没有,请缩短字段
可能模型
在表中重复了很多次?如果是这样,请对其进行规范化,并用规范化后的id
替换该列
你似乎在使用MyISAM;你也可以(应该)切换到InnoDB。这将更改错误消息,或者可能使其消失
您是否使用utf8字符?你用英语做每件事吗?更改字符集可以使200个字符表示200字节,而不是600(utf8)或800(utf8mb4)
更改ip\u地址的字符集将使其占用空间从15*(字节/字符)缩减。从CHAR
更改为VARCHAR
也是如此。还要注意,15不足以处理IPv6。MySQL的可能副本对索引键有限制。其中一个索引的CharField太长您要优化的实际查询是什么?“Prefix”索引实际上是无用的,尤其是在您建议的复合索引中
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes