`
wbj0110
  • 浏览: 1611379 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

关于数据库索引设计的几个常用算法

阅读更多

B+、B- Tree(mysql,oracle,mongodb)

     主要用在关系数据库的索引中,如oracle,mysql innodb;mongodb中的索引也是B-树实现的;还有HBase中HFile中的DataBlock的索引等等。

     动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。

但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。

也就是说,因为磁盘的操作费时费资源,如果过于频繁的多次查找势必效率低下。那么如何提高效率,即如何避免磁盘过于频繁的多次查找呢?根据磁盘查找存取的次数往往由树的高度所决定,所以,只要我们通过某种较好的树结构减少树的结构尽量减少树的高度,那么是不是便能有效减少磁盘查找存取的次数呢?那这种有效的树结构是一种怎样的树呢?

这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,自然就想到平衡多路查找树结构,也就是B~tree,即B树结构(后面,我们将看到,B树的各种操作能使B树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率)。

 

Hash表+桶(redis)

mysql中的adaptive hash index,redis中的数据存储实现都是采用hash,可以高效的进行数据的查询。

 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。
而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位

数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。综合两者特性,设计一种寻址容易,插入删除也容易的数据结构,如拉链法实现的哈希表。

 

Booleam Filter(HBase)

HBase中的rowkey设置建立Booleam Filter映射,用于快速判断rowkey是否在一个HFile中。在分布式数据库中用的比较多。

 基于BitMap的存储结构,采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。这个方法的缺点就是当检测的元素量很多时候可能有冲突,解决方法就是使用 k 个哈希 函数对应 k 个点,如果所有点都是 1 的话,那么元素在集合内,如果有 0 的话,元素则不再集合内。

分享到:
评论

相关推荐

    mysql_海量数据库的查询优化及分页算法方案.doc

    在大规模数据库中,查询优化和分页算法是两个非常重要的方面。本文将详细介绍 MySQL 海量数据库的查询优化和分页算法方案。 一、查询优化 查询优化是指通过调整查询语句和数据库结构来提高查询效率的过程。在 ...

    多级目录的数据库设计

    在设计多级目录数据库时,有几种常见的方法: 1. **自连接表法**:创建一个单一的“目录”表,该表包含目录ID、目录名、父目录ID等字段。父目录ID指向同一表中的另一个目录,形成自连接。通过递归查询可以获取整个...

    数据库算法及Google搜索引擎算法的秘密

    数据库算法通常分为几个关键类别,包括索引算法、查询优化、事务处理和并发控制等。索引算法如B树、B+树和哈希索引,它们用于快速定位数据,提高数据检索速度。B树和B+树是数据库中常用的自平衡多路搜索树,适合存储...

    B+树在数据库索引中的应用

    数据库索引的设计与实现有几种方法,主要阐述了使用B+树实现索引的方法。通过对B+树定义及 算法的描述,可以看到使用B+树能够方便、有效的建立数据库的索引,并且能够有效减少查找时磁盘的 I/O次数,提高数据查找的效率...

    关于数据库设计 PPT

    数据库设计的基本步骤通常包括以下几个阶段: 1. 需求分析阶段:这是整个设计过程的起点,需要深入了解和分析用户需求,包括所需的数据及处理逻辑,这一阶段至关重要,决定了后续设计的质量和效率。 2. 概念结构...

    海量数据库的查询优化及分页算法方案

    在海量数据库的查询优化及分页算法方案中,除了聚集索引的建立外,还需要注意其他几个方面的优化。例如,使用适当的数据库引擎,优化数据库的存储结构,使用适当的查询语句等。 在实际应用中,我们可以使用以下方法...

    数据结构课程设计(应用索引文件和查找算法的学生信息管理程序)

    在这个系统中,可能应用了以下几种常见算法: 1. 线性查找:从头到尾遍历列表,直到找到目标元素或遍历完整个列表。 2. 二分查找:适用于有序列表,每次比较中间元素,根据比较结果缩小查找范围,直到找到目标元素。...

    mysql数据库设计为表连接设计索引

    本文将深入探讨连接查询的基本原理、表访问顺序对索引设计的影响以及几种常见的连接方法(如循环嵌套连接、合并扫描、哈希连接等),并给出一些实用的设计建议。 #### 连接查询原理 连接查询是指将两个或多个表的...

    动漫管理系统数据库设计

    数据库设计通常分为几个关键步骤:需求分析、概念设计、逻辑设计、物理设计和实施。首先,需求分析阶段需要明确系统的目标和功能,比如动漫信息的录入、查询、更新、删除,用户行为追踪,推荐算法支持等。这一步确保...

    GIS的格网空间数据索引技术设计与实现

    在设计格网空间数据索引时,有以下几个关键点需要考虑: 1. **网格大小**:网格的大小直接影响索引的精度和效率。网格过小会导致索引过于复杂,增加存储和计算成本;反之,如果网格过大,可能会导致多个对象被分配...

    数据库结构与算法分析

    ### 数据库结构与算法分析 #### 一、基础知识与概念 **检索**是数据库操作中的一个核心环节,指的是在一个已有的记录集合中寻找关键码值等于给定值的记录,或者找出关键码值符合特定条件的某些记录的过程。随着...

    基于遗传算法的MYSQL数据库检索策略优化与设计.pdf

    在MySQL数据库检索策略优化中,遗传算法的应用主要涉及以下几个方面: 1. **编码定义**:在数据库检索策略中,每个个体(即数据库查询方案)可以被编码为一个基因串,代表一系列的操作顺序,如索引选择、连接顺序、...

    利用mysql实现的雪花算法案例

    在当今的互联网环境中,分布式系统和微服务架构越来越常见,随之而来的是数据库的拆分与分表需求。在这种背景下,如何生成全局唯一且不重复的ID成为了一个重要的问题。本文将详细介绍如何利用MySQL实现雪花算法,这...

    软件设计文档 需求分析 概要设计 详细设计 数据分析 数据库设计说明书等的编写提示

    本文将深入探讨标题和描述中提到的几个关键阶段,包括需求分析、概要设计、详细设计、数据分析以及数据库设计说明书的编写,旨在提供详尽的指导和建议。 首先,**需求分析** 是软件工程的第一步,它是确定系统或...

    大型ORACLE数据库优化设计方案

    SGA主要包括以下几个关键部分: 1. **数据块缓冲区**:用于存储从数据库读取的数据块,如表、索引等,采用LRU(Least Recently Used)算法管理,确保最常访问的数据始终位于内存中。 2. **字典缓冲区**:存储数据库...

Global site tag (gtag.js) - Google Analytics