2.mysql索引的实现原理和数据结构
为什么不用Hash表存储MySQL数据
树
B树
b树存储的应该有key,value,指针(存储子节点地址信息)一个磁盘块16kb,读一个磁盘块就是读取16kb,其中大部分存储空间被value(data)占去。
B+树
特点:叶子节点存储数据,非叶子节点存储指针和key(主键)。
优点:由于指针和key只占用很小的空间,所以一个非叶子节点可以存储大量主键和指针,和b树相比,三层的b+树可以存储非常多的数据,确同样只需要读取3次。
得出结论:
⭐一般情况下,3到4层的b+树足以支持千万级别的数据存储。
⭐让key尽可能地占据少的存储空间(int固定4字节,varchar可以指定长度,所以小于4的长度可以使用varchar)选择索引的时候选择varchar
3.索引设计的技巧
索引前缀长度选择,减少索引占用的空间
进行索引设计时,尽可能让key(索引)占用更小的存储空间
前缀索引:实际进行数据存储时,给当前列(通常是字符类型)建索引时,可以截取列的前一部分作为索引。
怎么确定长度:可以用数据统计,测试合适的长度
由于b+树非叶子节点只存储索引和指针,索引占用空间越小,一个非叶子节点能够存储的索引越多,所以需要尽量地优化索引设计,一个好的方法就是索引前缀。