char和varchar的区别、varchar(?)中问号部分的含义、索引的作用
char和varchar的区别
char是固定长度类型,当输入字符不满设定的固定长度时依旧占用固定长度的空间,补充空字节。
最大长度为255个字符
- 优点:效率高,在涉及索引和排序时
- 缺点:占用空间
- 使用场景:存储密码的md5值
容易想到,存储固定长度的值时适合用char
varchar可变长度,只占用实际存储粗的字符串长度加上一个到两个字节(用于记录字符串长度),不会填充空格,存储的字符串长度可变
- 优点:节约空间,灵活,适合存储长度不定、变化较大的字符串,如:用户输入的内容,地址信息,支持大长度(65535字节),适合动态数据。
- 缺点:性能较低(在排序和检索时),存储碎片化(频繁更新可能导致碎片化,影响性能),最大长度限制(虽然最大长度很长,但是实际可用长度受限于行的最大长度,通常是8192字节,其他列也会影响)
适合存储可变长度类型,最好不要存储固定长度类型的数据,因为会额外存储长度信息,所以会浪费存储空间
varchar(?)中问号部分的含义
问号部分表示最多存放多长的空间,不同最大长度的varchar存储相同的字符串消耗空间相同,但是更长的最大长度在排序时会消耗更多的内存,以你为order by col采用fixed_length计算col长度。
索引的含义
索引的出现是为了提高数据的查询效率,就像是书的目录一样,如果没有索引,你想查找一个记录就只能遍历寻找。使用索引就可以快速找到内容,索引需要占用额外的空间,创建的时候也需要消耗额外的时间,在表增删改的时候索引也需要动态维护,这样就占用了数据的维护速度。
建立索引的原则:
- 在最频繁使用的、用来缩小查询范围的字段上建立索引
- 在频繁使用的、需要排序的字段上建立索引
不适合建立索引的情况:
- 对于查询中很少设计的列或者重复值比较多的列,不宜建立索引
- 对于一些特殊的数据类型,不适合建立索引,比如text长字符串