【MySQL进阶之路 | 高级篇】哈希索引, Memory的索引方案

1. 哈希索引

加速查找速度的数据结构,常见的有两类.

  • 树,例如平衡二叉树,增删查改的平均时间复杂度为O(logn).
  • 哈希.例如哈希表.增删查改的平均时间复杂度为O(1).

采用hash进行检索的效率非常高.基本一次检索就可以找到数据.而b+树还有从上到下进行查找.从效率上来说,hash比b+树更快.

在hash的方式下,一个元素经过hash函数计算得到的槽的位置.该函数将关键字映射到哈希表的槽位上.槽位其实也就是数组的一个元素而已.哈希函数可能会将两个不同的关键字映射到一个槽位上,这叫做哈希碰撞.我们可以用拉链法解决.即将hash在同一槽位的元素放在一个单向链表中,当链表过长,链表会被改造为红黑树.

2. 哈希索引的缺陷

  • 哈希索引只能满足=,<>,IN等查询,如果进行范围查询,哈希表的索引,时间复杂度会退化为O(n),而b+树仍然保持为O(logn).
  • 哈希索引的数据的存储是无序的,所以在ORDER BY的情况下,使用hash索引还需要对数据进行重新排序.
  • 对于联合索引的情况,hash值是将联合索引键合并一起后来计算的.无法对单独的一个键或者几个索引键进行查询.
  • 对于等值查询来说,hash索引的效率很高.但对于索引列存在很多重复值时,效率会很低.遇到哈希冲突时,需要遍历桶中的行指针来比较,找到查询的关键字.非常耗时.

Memory是支持哈希索引的.而InnoDB和MyISAM是不支持的.但InnoDB提供了自适应的哈希索引.如果某个数据经常被访问,当满足一定条件时,就会将这个数据页的地址存放在哈希表中,下次查询时,就可以直接找到这个页面的所在位置.

采用自适应哈希索引的目的是为了方便根据SQL条件迅速定位到叶子节点,特别是当b+树比较深的时候,通过自适应hash索引可以明显提高数据的检索效率.

 

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

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

相关文章

RabbitMQ(七)Shovel插件对比Federation插件

文章目录 Shovel和Federation的主要区别(重点)一、启用Shovel插件二、配置Shovel三、测试1、测试计划2、测试效果发布消息源节点目标节点 Shovel和Federation的主要区别(重点) • Shovel更简洁一些 • Federation更倾向于跨集群使…

如何使用idea连接Oracle数据库?

idea版本:2021.3.3 Oracle版本:10.2.0.1.0(在虚拟机Windows sever 2003 远程连接数据库) 数据库管理系统:PLSQL Developer 在idea里面找到database,在idea侧面 选择左上角加号,新建&#xff…

基于Vue的日程排班表 - common-schedule

原文:基于Vue的日程排班表 - common-schedule-CSDN博客

英码科技携手昇腾打造“三位一体”智慧化工解决方案,使能化工产业管理更高效、智能

我国是世界公认的化工大国。然而,大部分化工园区的日常管理方式较为传统,各园区、厂区的门禁、视频、停车场等子系统犹如一个个独立的“岛屿”,每个“岛屿”需要耗费大量人力及时间成本进行巡检、记录、上报,且不能做到全域、全时…

Github 2024-06-16 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Livewire: Laravel中构建动态UI组件的全栈框架 创建周期:1818 天开发语言:PHP协议类型:MIT LicenseStar数量:21388 个Fork数量:1…

websocket服务执行playwright测试

上一篇博客从源码层面分析了playwright vscode插件实现原理,在上一篇博客中提到,backend服务是一个websocket服务。这遍博客将介绍如何封装一个websocket服务,通过发送消息来执行playwright测试。 初始化项目 第一步是初始化项目和安装必要的…

LangChain入门学习笔记(三)—— Model I/O之Prompts

如果说LCEL是粘合剂,那么它需要粘合起来的要素就是各种组件。其中最核心的要素就是LangChain官方文档中定义的Model I/O:Prompts、Chat Models、LLMs和Output Parsers。这4个基本组件,可以处理基本的用户输入并通过大模型处理后按要求输出。 …

没有超头、最低价的视频号618战况如何?有何趋势变化?| 视频号618观察

转眼618大促已接近尾声,今年的你有剁手哪些好物吗?对618的整体感觉又是如何呢? 这是12年来,第一个电商平台没有预售付定金的618,当然或许此后的双11、每一次大促也将逐渐回归传统,回归本质。 而对于视频号来…

拒绝吸烟,远离慢阻肺——朗格力复合营养素助力守护肺部健康

#肺科营养#朗格力#班古营养#复合营养素#肺部营养#肺部健康# 你知道吗?慢阻肺这一疾病在我国的患者数量已突破亿级大关,尤其在40岁以上的成年人中,平均每7个人中就有1位可能受其困扰。然而,很多人对慢阻肺的严重性认识不足,常常将其视为一种普通的咳嗽或喘息,忽视了它潜在的危…

js 将日期转换成大写格式

最近做了个需求将日期转换成大写汉字,网上搜的不对。进行改正后如下: function dateToChinese(date) {var chinese [零, 一, 二, 三, 四, 五, 六, 七, 八, 九];var y date.getFullYear().toString();var m date.getMonth().toString();var d date.g…

Java——访问修饰符

一、访问修饰符是什么 Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员(字段)的可见性和访问级别。 Java提供了四种访问修饰符: 访问修饰符同一类内同一包内不同包的子类不同包的非子类适用对象public可见可见可见可见类、…

gorm存储json

在一些存储配置文件的场景下,我们需要在mysql中存储json。最直接的方法是在存储时通过json.Marshall()序列化方法将需要存储的对象转化为json字符串,然后再存入mysql中。需要使用时,从mysql中取出,再进行json.Unmarshall()。具体操…

fataadmin导出Exel文件图片太大

// 导出图片过大处理 exportOptions: {ignoreColumn: [0, operate],onBeforeSaveToFile: function (data, fileName, type, charset, encoding, bom) {return $.fn.bootstrapTable.defaults.extend.savestatus;},onCellHtmlHyperlink: function ($cell, rowIndex, colIndex, hr…

Pytorch Geometric(PyG)入门

PyG (PyTorch Geometric) 是建立在 PyTorch 基础上的一个库,用于轻松编写和训练图形神经网络 (GNN),适用于与结构化数据相关的各种应用。官方文档 Install PyG PyG适用于python3.8-3.12 一般使用场景:pip install torch_geometric 或conda …

AI大模型部署Ubuntu服务器攻略

一、下载Ollama 在线安装: 在linux中输入命令curl -fsSL https://ollama.com/install.sh | sh 由于在linux下载ollama需要经过外网,网络会不稳定,很容易造成连接超时的问题。 离线安装: 步骤一: 下载Ollama离线版本…

【经验分享】RT600 serial boot mode测试

【经验分享】RT600 serial boot mode测试 一, 文档描述二, Serial boot mode测试2.1 evkmimxrt685_gpio_led_output 工程测试2.2 evkmimxrt685_dsp_hello_world_usart_cm33工程测试 一, 文档描述 RT600的启动模式共支持4种: 1&am…

【jdk】jdk11 jdk17 jdk21的新特性

前言:按照博主的个人理解,一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性,之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢? 比如jdk11新特性,一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…

第十五届蓝桥杯Python大学B组国赛/决赛 I题题解

大概题目 某国王要给n个岛之间修桥,桥是双向的,国王可以将a岛和b岛连接起来,也可以将两座岛的桥炸掉,国王想知道经过一系列操作之后两座岛之间是否连接。 输入:岛屿数量n,每行第一个数是选择,…

【C++】类的六个默认成员函数

文章目录 类的六个默认成员函数一、构造函数二、析构函数三、拷贝构造函数四、赋值运算符重载五、const成员六、取地址及const取地址操作符重载 类的六个默认成员函数 如果一个类中什么成员都没有,称为空类。空类中真的什么都没有吗?并不是,…

CRMEB 多店商品详情页装修说明

一、功能介绍 商家可调整商品详情各板块样式,可根据不同的需求开启或关闭单独的板块 二、操作流程 装修 > 商品详情 三、功能说明 1、商品信息 可控制商品详情页面商品信息的显示与隐藏 2、会员信息,排行榜 控制商品详情页面会员信息及排行榜的…