Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL创建索引错误_Mysql_Django_Indexing - Fatal编程技术网

MySQL创建索引错误

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 怎么办?屏幕截图上显示了表格的结构。请参阅您的问题下方评论中已回答的可能重复问题的参考。或者我应该说一个规范的重复目标来结束这个问题,如果它真的结束了。也就是说,在存储引擎或字符集方面,该参考文献

问题是为表“visions\u visit”(Django-visit应用程序)创建索引,因为每个查询至少持续60毫秒,而且会变得更糟

它返回:

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