您的位置:首页 > 数据库 > MySQL

MySQL索引长度问题(转)

2008-01-25 17:00 477 查看
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值。
对于该值,是这么说的:

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

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

因为大多数名字通常在头10个字符不同,这个索引应该不比从整个[code]name
列的创建的索引慢多少。另外,在索引使用部分的列能使这个索引成为更小的文件大部分, 它能保存很多磁盘空格并且可能也加快
INSERT
操作! [/code]
使用该属性主要是为了提高系统处理速度,但有时也会带来不必要的麻烦,呵呵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: