hash:使用存储在内存中的内容来创建表,而且数据全部存放在内存中。缺点:hash冲突–扰动函数 1.Hash存储需将所有的数据文件添加到内存中,比较浪费内存空间 2.如果所有的查询都是等值查询,那么hash比较快,但范围查找就不太适合 如果使用hash做成的索引,因为需要全部扫描,即使在内存中,天猫转让速度不容乐观。
适合场景:等值查询的场景,就只有KV(Key,Value)的情况,例如Redis、Memcached等这些NoSQL的中间件。
二叉树: ⼆叉树是有序的,所以是⽀持范围查询的,但时间复杂度是O(log(N))。
缺点:二叉树还是红黑树都会因为树的深度过深而造成io次数过多,影响读取效率,以及有可能退化为链表结构。
不推荐使用select * 而使用字段,因为数据是存储在磁盘,并且MySQL服务有筛选数据,每次读取数据都会经过服务筛选,如果都是使用select *就会增加io次数。
B树: 同样的元素,B树的表示要⽐完全平衡⼆叉树要“矮”,原因在于B树中的⼀个节点可以存储多个元素,相对于完全平衡⼆叉树整体的树⾼降低了,磁盘IO效率提⾼了。
https://www.alwdzr.com
从最开始的Hash不⽀持范围查询,⼆叉树树⾼很⾼,只有B树 跟B+有的⼀⽐。
原创声明,本文系作者授权云+社区发表,未经许可,不得转载。
如有侵权,请联系 yunjia_community@tencent.com 删除。
我来说两句