主键为什么推荐使用int long
1、建立主键索引的树,主键如果为int,long,比较大小时,比较快,可以快速定位到需要的数据
2、存储小,所以不推荐uuid,uuid查询慢
为什么推荐主键自增?
1、主键自增时,新插入的数据都是递增的,在维护B+树时,不需要在中间插入值,只需要追加到最后,也就意味着不需要分裂,因为分裂影响性能
2、趋势递增也可以,比如雪花算法, 但是uuid就不行
hash的结构?
hash是一个一维的数组,加一个二维的链表
存储数据为什么使用B+树,不使用hash?
1、hash查找虽然比B+树要快,但是hash不支持范围查找
2、hash做等值查找非常快,做范围查找等于全表扫描
3、hash不能做排序
4、示例: select * from t where t.name > 'tom';
hash索引和b+树索引的区别
hash索引底层就是hash表,进行查找的时候调用一次hash函数就可以获取到相应的键值,之后进行回表查询就可以查到需要的数据
B+树地层实现是多路平衡查找树,每一次查询都是从根节点出发,查找到叶子结点,才能查到需要的键值,如果需要回表,再回表查询一次即可得到需要的数据
大多数情况下直接选择b+树索引可以获得稳定且较好的查询速度
1、hash索引等值查询速度较快,但无法进行范围查询,因为在hash索引中,经过hash函数建立索引后,是无序的。B+树,左子结点小于当前节点,右子节点大于当前节点,天然支持范围查询
2、hash索引不支持模糊查询
3、hash索引,一定会回表查询,b+树在聚簇索引查询或者索引覆盖时,没有回表操作
4、hash索引虽然等值查询比较快,但是不够稳定,hash冲突可能会导致同一个hash值有大量的键值,导致性能较差;b+树查询效率比较稳定
标签:hash,查询,回表,索引,查找,mysql,主键
From: https://www.cnblogs.com/jis121/p/17994243