【索引】数据库索引之散列索引

目录

1、什么是散列?

2、如何评价一个散列函数的好坏?

3、散列中的桶溢出处理

4、散列在索引中的应用

4、顺序索引和散列索引的比较


1、什么是散列?

        顺序文件组织的一个缺点是我们必须访问索引结构来定位数据,或者必须使用二分法搜索,这将导致过多的 I/O 操作。基于散列(hashing)技术的文件组织使我们能够避免访问索引结构。//使用散列可以减少查找的次数。所谓散列,其实就是键值对的映射,而映射效果由散列函数决定

        在散列中,散列桶(bucket)用来表示能存储一条或多条记录的一个存储单位。通常一个桶就是一个磁盘块,但也可能小于或大于一个磁盘块。

        正规地说,令 K 表示所有搜索码值的集合,令 B 表示所有桶地址的集合,散列函数就是一个从 K 到 B 的函数。我们用 h 表示散列函数

        为了插人一条搜索码为 K_{i} 的记录,我们计算 h(K_{i}),它给出了存放该记录的桶的地址。我们目前假定桶中有容纳这条记录的空间,于是这条记录就存储到该桶中。//插入

        为了进行一次基于搜索码值 K_{i} 的查找,我们只需计算 h(K_{i}),然后搜索具有该地址的桶。假定两个搜索码 K_{5} 和 K_{7} 有相同的散列值,即 h(K_{5})= h(K_{7})。如果我们执行对K_{5} 的查找,则桶h(K_{5})包含搜索码值是K_{5}以及K_{7}的记录。因此,我们必须检查桶中每条记录的搜索码值,以确定该记录是否是我们要查找的记录。//查询,注意可能出现hash冲突

        删除也一样简单。如果待删除记录的搜索码值是K_{i},则计算h(K_{i}),然后在相应的桶中查找此记录并从中删除它。

        //使用好的散列函数一般来说可以避免繁琐的查询过程,使查询一步到位

2、如何评价一个散列函数的好坏?

        最坏的可能是散列函数把所有的搜索码值映射到同一桶中。这种函数并不是我们所期望的,因为所有的记录不得不存放到同一个桶里。查找一个需要的记录时将不得不检查所有记录。//此时的散列就像退化成了一个链表,散列函数没有任何的散列效果

        理想的散列函数需要达到的效果:

        理想的散列函数把存储的码均匀地分布到所有桶中,使每个桶含有相同数目的记录

        由于设计时我们无法精确知道文件中将存储哪些搜索码值,因此我们希望选择一个把搜索码值分配到桶中并且具有下列分布特性的散列函数。

  • 分布是均匀的。即散列函数从所有可能的搜索码值集合中为每个桶分配同样数量的搜索码值
  • 分布是随机的。即在一般情况下,不管搜索码值实际怎样分布,每个桶应分配到的搜索码值数目几乎相同。更确切地说,散列值不应与搜索码的任何外部可见的排序相关,例如按字母的顺序或按搜索码长度的顺序。散列函数应该表现为随机的。

        //散列函数的设计有一定的困难,可能需要针对特定的场景进行特定的设定,但是搜索码具有随机性,又很难做到有放之四海而皆准的散列函数

3、散列中的桶溢出处理

        当插人一条记录时,记录映射到的桶有存储记录的空间。如果桶没有足够的空间,就会发生桶溢出(bucket overflow)

        处理桶溢出一般有两种方案,即闭地址(close addressing)方案和开地址(open addressing)方案。

        所谓的闭地址法也被称为链地址法(Chaining)。在这种方法中,每个哈希表的槽(bucket)是一个链表。当多个键被哈希到同一个槽时,这些键会被存储在该槽的链表中。

        比如,我们可以用溢出桶来处理桶溢出问题。如果一条记录必须插入桶 b 中,而桶 b 已满,系统会为桶 b 提供一个溢出桶,并将此记录插人到这个溢出桶中。如果溢出桶也满了,系统会提供另一个溢出桶,如此继续下去。一个给定桶的所有溢出桶用一个链接列表链接在一起,如下图所示:

        闭地址方案容易实现,但是有额外的链表存储开销。如果链表长度增加时,查找时间可能变长

        另一种方案就是开地址。开地址通过寻找其他空闲槽来处理冲突。在这种方法中,当一个槽已经被占用时,系统会根据一定的探测(probing)策略来寻找下一个可用的槽。

        开地址方案的好处是不需要链表,从而节省存储空间。但是在高负载因子下,探测序列变长,性能会出现明显的下降,所以需要有良好的探测策略以避免群聚(clustering)现象

        群聚(Clustering)现象在哈希表中指的是由于哈希冲突处理方法导致一系列相邻槽变得拥挤,从而影响哈希表的性能。这种现象主要出现在线性探测和二次探测中。

4、散列在索引中的应用

        散列不仅可以用于文件的组织,还可以用于索引结构的创建。散列索引(hash index)将搜索码及其相应的指针组织成散列文件结构

        我们可以按如下方法构建数据库的散列索引。将散列函数作用于搜索码以确定对应的桶,然后将此搜索码以及相应指针存入此桶(或溢出桶)中。

        下图给出了 instructor 文件上的一个辅助散列索引,其搜索码是 ID。图中的散列函数计算 ID 的各位数字之和对 8 取模的结果。该散列索引有 8 个桶,每个桶的大小为 2。其中一个桶有三个码映射到它,因此它有一个溢出桶。在这个例子中,ID 是 instructor 的主码,所以每个搜索码只对应一个指针。一般情况下,每个码可能对应多个指针。//其实就是Hash表

4、顺序索引和散列索引的比较

        顺序索引,是一种基于树的索引,最常见的是 B- 树和 B+ 树索引。它与散列索引最大的区别就在于顺序索引支持范围查询和排序,精确匹配的效率也尚可接受,更具通用性​//比如Mysql、PostgreSQL数据库等

        散列索引不支持范围查找和排序,虽然精确查找效率高,但是相比来说通用性更差。因此,散列索引更适用于需要快速查找的场景,比如缓存系统(Memcached 和 Redis等)

        以下是顺序索引和散列索引的简单对比表:

特性顺序索引散列索引
数据存储顺序有序存储无序存储
支持的查询类型范围查询、排序、精确匹配精确匹配
查询效率O(log n)O(1)
插入/删除效率O(log n)O(1)
结构类型B-树或 B+树结构哈希表结构
适用场景范围查询、排序查询、唯一性约束精确匹配查询、高频查找操作
不支持的操作N/A范围查询、排序查询
维护成本较高较低
空间利用率较高取决于哈希函数和哈希表大小

        至此,全文结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最经典实用的Buck电路仿真与设计 /Psim仿真Buck电路详解

为了节省大家时间,减少找软件的麻烦,提供了软件下载地址,如果需要下载,请访问下面的网站进行购买: Psim电力仿真软件安装-送教程和维也纳整流电路仿真-可远程安装-淘宝网 (taobao.com) 或者加作者微信,发20元微信红包便可直接获取下载软件,如果找不到软件,有需要下载的…

软件协同开发是一种通过团队合作来创建软件的开发方法

软件协同开发是一种通过团队合作来创建软件的开发方法。与传统的瀑布模型相比,软件协同开发强调团队成员之间的合作和沟通,以实现更高效的开发过程和更优质的软件产品。 在软件协同开发中,团队成员通过一系列工具和技术来协同工作。这些工具…

MATLAB2024a下的BP神经网络分类工具箱预测

1 打开BP神经网络分类工具箱GUI界面 图1-1 如图1-1所示,虽然叫神经网络模式识别但确实是BP神经网络分类工具箱,如果想要使用其他神经网络模型,可以打开左边的深度网络网络设计器,如图1-2、图1-3所示: 图1-2 图1-3 2 导…

uniapp条件编译使用教学(#ifdef、#ifndef)

条件编译介绍: 条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译 到不同平台。 #ifdef和#ifndef的区别: #ifdef APP-PLUS————只在APP显示 #ifndef APP-PLUS————除了APP不显示…

SQL面试题练习 —— 无效搜索

目录 1 题目2 建表语句3 题解 题目来源:百度。 1 题目 现有一份用户搜索日志,包含用户ID,时间,用户搜索内容。定义 无效搜索:如果用户下一次搜索内容中包含本次搜索内容,则认为本次搜索为无效搜索。请查询用…

以入站营销为核心,撬动To B业务增长新杠杆

传统的营销模式已逐渐失效,企业需要寻找新的营销策略来吸引客户并推动业务增长。Outbound marketing(出站营销)作为一种传统的营销方式,虽然在过去发挥了重要作用,但在数字化时代,其局限性也日益明显。 数字…

use embeddings stored in vector db to reduce work for LLM generating response

题意:使用存储在向量数据库中的嵌入来表示,以减少大型语言模型(LLM)生成响应的工作量。 问题背景: Im trying to understand what the correct strategy is for storing and using embeddings in a vector database, …

重温react-08

react中的createContext使用方式 简介一下,就是组件之间可以互相通信的比较好用的传值方式,话不多说直接上代码。 以下介绍的是类组件中的方式,在函数组件中不是如此使用的。 定义一个通用的方法 import { createContext } from "react…

论文学习 --- RL Regret-based Defense in Adversarial Reinforcement Learning

前言 个人拙见,如果我的理解有问题欢迎讨论 (●′ω`●) 原文链接:https://www.ifaamas.org/Proceedings/aamas2024/pdfs/p2633.pdf 研究背景 深度强化学习(Deep Reinforcement Learning, DRL)在复杂和安全关键任务中取得了显著成果,例如自动驾驶。然而,DRL策略容易受…

【杂记-浅谈IPv6过渡技术之6to4网络技术】

IPv6过渡技术之 6to4网络技术 一、6to4网络概述二、6to4网络配置 一、6to4网络概述 6to4是一种IPv6转换技术,它允许IPv6流量通过IPv4网络传输。6to4网络的地址可以表示为2002:IPv4地址::/48,其中前48位(2002:a.b.c.d)由分配给路由…

python调用c++ ctype list传数组与for if 列表推导式

python调用c ctype list传数组 关于ctype与python list的转换很简单,大家记住下面两条就够用了,后面是练习 list传进C数组 import numpy as np from ctypes import * mylist [101, -101, ..., 101, -101]##your list mycbytearray (c_byte * len(my…

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模&#…

在postgrel中使用hints

在 PostgreSQL 中,可以使用查询提示(Query Hints)来影响查询优化器的行为,但需要注意的是,PostgreSQL 并不像一些商业数据库那样有丰富的提示语法,而是提供了一些基本的方式来引导优化器。 使用查询提示的基本方式 使用 /*+ … / 注释提示: PostgreSQL 支持在 SQL 查询…

参数调优论文

基于Java EE的性能调优方法研究 - 中国知网 (cnki.net) 基于机器学习的Hadoop参数调优方法 - 中国知网 (cnki.net) 基于机器学习的数据库系统自动调参研究 - 中国知网 (cnki.net) 基于强化学习的文件系统性能自动调优及参数安全评估技术 - 中国知网 (cnki.net) 基于贝叶斯优…

如何在ArcGIS Pro中提取行政区划

我们在《2024版有审图号的SHP行政区划》一文中,为你分享过全国省市县级的行政区划。 现在再为你分享一下,如何在ArcGIS Pro中提取目标范围行政区划的方法,你还可在以文末查看领取该行政区划数据的方法。 直接选择 在菜单栏上点击一下选择下…

这谁顶得住啊!AI绘画模型竟然可以画出质量逼真的黑丝!

今天看到一个有趣的AI绘画玩法,用SD画黑丝!话不多说,开始今天的实战演练。 首先做好准备工作:部署好本地Stable Diffuison 然后就轮到今天的主角上场了 黑丝Lora模型:perfectpantyhose 这是一款叫perfectpantyhose…

【最佳实践】前端如何搭建自己的cli命令行工具,让自己编码的时候如虎添翼

作为前端开发人员,搭建自己的前端CLI工具是一个有趣且有意义的事情。以下是一篇详细的教程,包括使用场景和案例。 使用场景 假设你是一个前端团队的一员,需要频繁地在不同的项目中执行一些标准化的任务,比如: 根据模…

重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?

答:任务目录和引擎监控目录并没有按照网络集群设置,需要调整为网络路径。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网…

TikTok API接口——获取视频评论信息

一、引言 TikTok,作为全球最受欢迎的短视频社交平台之一,不仅为用户提供了展示才华和分享生活的舞台,也为品牌和企业提供了与年轻用户互动的新渠道。在这个信息爆炸的时代,了解用户的声音、掌握舆论动向显得尤为重要。通过TikTok…

alibaba easyexcel 导出excel使用

需求 传统导出&#xff0c;一般都是通过Workbook > Sheet > Row > Cell 获取详细Cell 设置值&#xff0c;比较麻烦&#xff0c;偶然遇到alibaba easyexcel 直接通过注解设置哪些需要导出 哪些忽略&#xff0c;发现特别好用。 pom依赖 <dependency><groupId…