For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在上文中给大家简单介绍了关于数据库索引的一些基础知识等内容,而本文我们就再来了解一下,哈希索引与全文索引的区别分析。
哈希索引
哈希表也称为散列,是一种以键-值(key-value)存储数据的结构。输入查询的key,就能找到对应的value。哈希的思路很简单,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。
当然会存在哈希冲突,对个key在经过哈希算法处理后可能出现在哈希表中的同一个槽位,当出现哈希冲突的时候,可以使用链表来解决。这样发生冲突的数据都放入到链表中。在进行数据查询的时候,先找到哈希表中的槽位,然后在链表中依次遍历找到对应的值。
mysql
哈希表的这种结构适合于等值查询的场景,在优场景的下的时间复杂度能达到O(1)。
哈希索引的缺点
1、因为是哈希表存储的是Hash运算之后的Hash值,所以它只能用于等值的查询,范围查询在哈希索引中不支持;
2、无法利用索引排序,索引中存储的只是Hash计算之后的Hash值,对于排序,索引本身无法支持;
3、组合索引不能利用部分索引,也就是不支持左匹配原则,对于组合索引,Hash索引在计算Hash值的时候是组合索引键合并后再一起计算Hash值,而不是单独计算Hash值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash索引也无法被利用;
4、哈希索引需要进行回表查询,因为哈希索引存储的都是哈希值和行指针,所以不能避免使用索引来避免读取行。
InnoDB中还有一个特殊的功能叫做"自适应哈希索引(adaptivehashindex)"。当InnoDB注意到某些索引值被使用的非常频繁时,它会在内存中基于B+tree索引之上在创建一个哈希索引,这样就能让B+tree索引也有哈希索引快速查找的优点了,这是一个完全自动,内部的过程,用户无法控制或者配置,不过这个功能可以手动关闭。
InnoDB中的自适应Hash相当于是“索引的索引”,采用Hash索引存储的是B+树索引中的页面的地址。这也就是为什么可以称自适应Hash为索引的索引。采用自适应Hash索引目的是可以根据SQL的查询条件加速定位到叶子节点,特别是当B+树比较深的时候,通过自适应Hash索引可以提高数据的检索效率。同时对于非聚簇索引中的查询,自适应哈希也能减少回表的次数。
全文索引
全文索引就是将存储于数据库中的整本书或整篇文章中的任意内容信息找出来的技术,可以根据需求获取全文中的有关文章,节,段,句,词等信息,也能进行统计和分析。
InnoDB早是不支持存储全文索引的,想要使用全文索引就要选用MySIAM存储引擎,从版本1.2.x开始才增加了全文索引支持。
全文索引一般使用倒排索引(invertedindex)实现,倒排索引和B+树索引一样,也是一种索引结构。
倒排索引在辅助表(auxiliarytable)中存储了单词与单词自身在一个或多个文档中所在位置之间的映射。这样当全文索引,匹配到对应的单词就能知道对应的文档位置了。
倒排索引是区别于正排索引的概念:
正排索引:是以文档对象的ID作为索引,以文档内容作为记录的结构。
倒排索引:Invertedindex,指的是将文档内容中的单词作为索引,将包含该词的文档ID作为记录的结构。
倒排索引中文档和单词的关联关系,通常使用关联数据实现,主要有两种实现方式:
1、invertedfileindex:会记录单词和单词所在的文档ID之间的映射;
2、fullinvertedindex:这种方式记录的更详细,除了会记录单词和单词所在的文档ID之间的映射,还会记录单词所在文档中的具体位置。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。