更新时间:
#mysql int index vs varchar index
虽然有的测试看起来, int varchar 都是索引(uniq index)查询速度没区别
但考虑
- 插入时候,int 可以保证递增,不会移动page 。而varchar每次存储还得移动
- varchar 会单独存储一个字节,保存长度。
关于记录的额外信息这部分,是服务器为了描述这条记录而不得不额外添加的一些信息,这些额外信息分为3类,分别是变长字段长度列表、NULL值列表和记录头信息。
这些变长字段(比如varchar)占用的存储空间分为两部分:
真正的数据内容部分,放在对应的列 真实占用的字节数,放在变长字段列表部分
MySQL规定了一个row所有的字段加起来总长度不能超过65535字节 MySql 最常用存储引擎 InnoDB 和 MyISAM 都不支持 Hash 索引,它们默认的索引都是 B-Tree。但是如果你在创建索引的时候定义其类型为 Hash,MySql 并不会报错,而且你通过 SHOW CREATE TABLE 查看该索引也是 Hash,只不过该索引实际上还是 B-Tree。 虽然常见存储引擎并不支持 Hash 索引,但 InnoDB 有另一种实现方法:自适应哈希索引。InnoDB 存储引擎会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引。