MySQL索引长度问题(转)

mysql 插入数据时返回Duplicate entry...for key1

 key1为主键,是长度为255的变长字符串,插入的数据不重复,但是插入操作无法成功,提示重复的内容只是整个串的一部分,该部分内容确实是重复的
在网上找了半天也没有找到解决方法,最后show index from tbl;发现该主键有一项属性Sub_part为10,怀疑是该值有问题。但是该值是什么意思,再插入数据时有什么作用,并不清楚。
在死马当活马医的指导思想下,通过图形终端修改索引的长度为255,此时再用show index来看,sub_path属性的值已经变为NULL了,再进行插入操作——成功。
又查了一下资料,发现对char和varchar类型的数据建立索引时,可以只使用该列的一部分内容,图形终端默认使用的长度为10,也就是我们开始时看到的sub_part值。
对于该值,是这么说的:

对于CHARVARCHAR列,索引可以只用一个列的部分来创建,使用col_name(length)句法。(在BLOBTEXT列上需要长度)。下面显示的语句使用name列的头10个字符创建一个索引:

mysql> CREATE INDEX part_of_name ON customer (name(10));

因为大多数名字通常在头10个字符不同,这个索引应该不比从整个name列的创建的索引慢多少。另外,在索引使用部分的列能使这个索引成为更小的文件大部分, 它能保存很多磁盘空格并且可能也加快INSERT操作! 
使用该属性主要是为了提高系统处理速度,但有时也会带来不必要的麻烦,呵呵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值