如果不是普通索引的话,是不存在回表这一说法的。
哈希索引:
哈希索引是基于哈希表的实现,只有精确匹配索引所有列的查询才有效。大白话就是不能使用范围查找,在MySQL中,只有memory存储引擎才显式支持哈希索引。
哈希索引自身只需要存储对应的hash值,所以索引的结构十分紧凑,这让哈希索引查找的速度非常快。
解决哈希冲突最有效的方法是编写优秀的高效的哈希算法。一般的解决思路是开放地址法,再哈希法,拉链法(哈希桶)。
jdk中关于hashmap哈希冲突的解决方式是:加入扰动函数,让高位参与运算,降低哈希冲突的概率。采用链表的方式带来的弊端是,可能导致链表的长度无限扩大,使得遍历时增加性能开销。
CRC循环冗余校验:在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段,在诸多检错手段中,CRC就是最著名的一种。
案例:当需要存储大量的URL,并且根据URL进行搜索查找,如果使用B+树,存储的内容就会很大。
select id from url where url=' '
也可以利用URL使用CRC32做哈希,可以使用以下查询方式:
select ud from url where url=' ' and url_crc=CRC32(' ');
此查询性能较高的原因是使用提及很小的索引来完成查找。