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值。
对于该值,是这么说的:
对于
mysql> CREATE INDEX part_of_name ON customer (name(10));
使用该属性主要是为了提高系统处理速度,但有时也会带来不必要的麻烦,呵呵。
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]
使用该属性主要是为了提高系统处理速度,但有时也会带来不必要的麻烦,呵呵。
相关文章推荐
- MySQL索引长度限制问题
- mysql索引的长度问题
- MySQL索引的索引长度问题
- MySQL索引的索引长度问题
- MySQL索引长度限制问题
- MySQL索引varchar长度问题(不能超过255)
- MySQL索引的索引长度问题
- 工作随笔——叁(MYSQL中GROUP_CONCAT截取长度问题)
- 关于mysql的字段长度含义问题。
- MySQL index索引问题
- MySql中UTF8 和 GBK 编码中文字符长度问题
- Mysql索引长度限制
- MySQL 索引失效问题分析
- Mysql连接查询时索引失效,字符集问题
- mysql 索引长度和区分度
- mysql旧版本密码长度问题
- mysql中的设置varchar长度问题
- 修复数据库索引问题:控制索引长度
- mysql设置合适的索引长度
- 关于mysql使用索引的一个问题