《高性能MySQL》笔记----伪哈希索引策略

高性能mysql笔记—索引篇 最近在读高性能mysql这本书,这一系列文章只为读书笔记一、索引基础        索引是存储引擎用于快速查找记录的一种数据结构,所以索引本质就是数据结构,根据索引类型的不同,所对应的数据结构也不尽相同,索引类型对应的数据结构将在第二节介绍。索引可以包含一个或者多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为mysql只能高效的使用索引的最左前缀。创建一个包含两个列的索引和两个只包含一... 阅读详情
创建伪哈希索引策略:
1、使用这个策略前,要先了解哈希索引的优劣和原理;
2、思路:在B-Tree基础上创建夜歌伪哈希索引,这和真正的哈希索引不是一回事。它是使用哈希值而
不是键本身进行索引查找,需要在查询的where子句中手动指定使用哈希函数;
实例
需要存储大量的url , 并需要根据url进行搜索查找。直接用B-Tree来存储url存储的内容就会很大,
正常情况的查询有:
mysql> select id from url where url="http://www.mysql.com";
若删除原来的url列上的索引,而新增一个被索引的url_crc列 ,使用CRC32做哈希,就可以使用下面的方式查询:
mysql> select id from url where url="http://www.mysql.com" and url_crc=CRC32("http://www.mysql.com");
 这样做的性能会非常高,因为MySQL优化器会使用这个选择性很高而体积很小的基于url_crc列的索引来完成查找
(上例中索引值为:1544886819)。

缺陷:需要维护哈希值。可以手动维护,也可以使用触发器实现。
1、使用触发器实现在插入和更新是维护url_crc列:
创建如下表:
create table pseudohash(
    id int unsigned not null auto_increment,
    url varchar(255) not null,
    url_crc int unsigned not null default 0,
    primary key(id)
);

创建触发器,先临时修改一下语句分隔符,这样就可以在触发器定义中使用分号:
mysql> delimiter //
mysql> create trigger pseudohash_crc_ins before insert on pseudohash for each row begin set new.url_crc=crc32(new.url); end;//
mysql> create trigger pseudohash_crc_upd before update on pseudohash for each row begin set new.url_crc=crc32(new.url); end;//
mysql> delimiter ;#注意这里的空格键

那么,新增或更新url同时url_crc也回自动更新;
2、注意
    采用这种方式切记不要使用SHA1()和MD5()作为哈希函数。这两个函数是强加密函数,计算出来的hash值时非常长的字符
串,会浪费大量空间,比较时也会更慢。它们设计目标是最大限度消除冲突(这里不需要这样高的要求)。如果数据表非常大,
crc32()会出现大量的哈希冲突,可以考虑实现一个简单的64位哈希函数(返回整数),例如:
mysql> select CONV(RIGHT(MD5('http://www.mysql.com/'),16),16,10) as hash64;

为了避免哈希冲突导致查询无法正常工作,where条件包含常量值url='http://www.mysql.com':
select id from url where url="http://www.mysql.com" and url_crc=CRC32("http://www.mysql.com");
数据库伪哈希Hash索引的创建和使用(理论+实战) 适用场景 适用于给一个varchar类型的字段建立索引。比如说类的全路径,URL等长字符串的字段。 com.xxx.aaa.bbb.ccc.yyy.ZZZ 其中大写的ZZZ就是类名。 像这种长字符串的,建立前缀索引区分度也不大,尤其一般前缀索引只使用10个字符,那么区分度可以说非常小。 所以,这种情况下,就可以考虑使用伪哈希索引。我们可以创建一个短的带有 b+tree索引的字段。 innodb也... 阅读详情

相关推荐

Hash函数与冲突解决办法

NULL 博文链接:https://eleopard.iteye.com/blog/1766890

mysql 伪哈希_MySQL技巧--伪哈希索引

哈希索引哈希索引就是通过一个哈希函数计算出某个key的hash值,并以这个hash值去找到目标数据。例如:对于数据库的一行数据,对其主键进行hash运算,得到一个地址,这个地址指向这行记录的存储地址,key与hash值的对应关系就构成了哈希索引。根据某一列进行查询时,如果为这一列建立了哈希索引,那查询的速度是非常快的,只需对其进行一次hash运算即可直接得到地址拿到数据,时间复杂度为O(1)。但是...

weixin_36473464的博客 272

VINS-Fusion实战:从零搭建无人机视觉SLAM系统(附ROS配置全流程)

本文详细介绍了如何从零开始为无人机搭建基于VINS-Fusion的视觉SLAM系统。内容涵盖硬件选型(重点推荐双目相机与IMU搭配)、ROS环境配置、传感器标定、核心参数调优以及实际飞行测试与问题排解全流程,旨在帮助开发者实现稳定、精确的无人机自主定位与导航。

wasm7browser的博客 214

mysql 创建伪hash索引

1创建自定义伪hash索引 原理:在BTree数上面创建一个伪hash索引,这和真正的hash索引不是一样的,因为还是使用的b-tree进行查找,但是它使用hash值而不是建本身进行查找 1.1正常情况查询 select id from url where url ="http://www.ayugudu.top"; 1.2伪hash索引查询 select id from url where url ="http://www.ayugudu.top" and url_crc=CRC("http://w

ytsydmx的博客 250

Agent测试框架Harbor指南

Harbor是一个AI Agent单元测试框架,用于自动化测试AI代理在容器环境中的任务执行能力。它支持18+种AI代理,通过沙箱隔离和自动验证机制评估任务完成情况。任务必须具有可编程验证的输出结果,适合代码、数据、系统等可量化任务,不适合创意写作等主观任务。Harbor采用CLI操作方式,核心架构包含Job管理、Trial执行和验证器三个层级,执行流程包括环境启动、Agent执行和结果验证。任务目录包含指令文件、配置文件、Docker环境定义和测试脚本等必需组件,通过测试脚本自动判断任务完成质量。

loo_Charles_ool的博客 1410

Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service

本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。

weixin_28314575的博客 321

mysql使用伪Hash索引提高查询性能

       我们知道 Mysql 默认引擎是 InnoDB 引擎,而 InnoDB 支持的索引类型为 B-tree 类型,如果对数据表有一个根据长字符查询的sql,使用 B-tree 索引在大数据量的情况下将会导致性能低下,然而 InnoDB 不支持Hash索引,不过我们可以在 B-tree 基础上创建一个伪哈希索引。这和真正的哈希索引不是一回事,因为还是使用 B-Tree 索引进行查找,但是它...

white_ice的博客 3128

稳健自适应波束形成学习(2):自适应计算对角加载量方法——基于广义线性组合的鲁棒Capon波束形成

对于快拍数相对阵元数较小时,样本协方差矩阵不能很好对协方差矩阵进行估计。常规的对角加载量需要根据经验值或不断手动调整进行测试,没有一个明确的准则和推导。该篇介绍一种自适应计算对角加载量的方法,且能适应快拍数相对阵元数较小时的情况。均匀线阵阵元数:18;载波频率30MHz;通信信号来波方向0°、来波估计偏差0.5°;干扰来波方向30°;通信信号信噪比10dB;干扰信号信噪比60dB。也即在干扰角度生成66dB的零陷,通信信号受到16dB的衰减。

a1uajug的博客 825

MySQL中的数据结构(1):Hash结构

Hash算法是通过某种确定的算法(MD5、SHA1、SHA2、SHA3等)将输入进行算法处理后输出,相同的输入永远可以得到相同的输出,但若是输入内容有微小的偏差,输出通常会有不同的结果。采用Hash进行的检索,基本一次就可以找到数据,从效率来说比B+树更快。

m0_62950962的博客 669

Scratch全攻略:从入门到实践的编程之旅

Scratch 是一款由麻省理工学院(MIT)开发的图形化编程工具 ,它诞生的初衷是为了让编程教育更加普及,尤其是让孩子们能够轻松接触和学习编程。与传统的基于文本代码的编程方式不同,Scratch 通过将编程指令以图形化的积木形式呈现,极大地降低了编程的门槛,让编程变得如同搭积木一样简单有趣。

邓邓子的博客 1万+

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

MySQL性能调优(五):MySQL中的索引(B+树索引、哈希索引、全文索引、索引使用、高性能索引创建策略)

能表示的整数范围当然也是依次递增,如果我们想要对某个整数列建立索引的话,在表示的整数范围允许的情况下,尽量让索引列使用较小的类型,比如我们能使用INT就不要使用BIGINT,能使用NEDIUMINT就不要使用INT,这是因为数据类型越小,在查询时进行的比较操作越快(CPU层次)数据类型越小,索引占用的存储空间就越少,在一个数据页内就可以放下更多的记录,从而减少磁盘/0带来的性能损耗,也就意味着可以把更多的数据页缓存在内存中,从而加快读写效率。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 4万+

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7791

高性能MySQL-创建高性能索引

如有侵权,请联系~如有错误,也欢迎批评指正~本篇文章大部分是来自学习《高性能MySQL》的笔记。

m0_50149847的博客 993

【CAN总线测试】——通讯相关诊断测试

本章主要介绍通讯相关诊断测试用例设计

LOVE135149的博客 1816

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MySQL索引之哈希索引和自适应哈希索引(Adaptive Hash Index)

MySQL索引之哈希索引和自适应哈希索引(Adaptive Hash Index) 官网:https://dev.mysql.com/doc/refman/...

小麦苗DBA宝典 948

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

高性能MySQL读书笔记 (三)

特殊类型:书中举例,ip地址应该用无符号整数存储,MySQL提供inet_aton, inet_ntoa方法转换。MySQL中,存储引擎先在索引中找到对应值根据匹配的索引记录找到对应的数据行.索引在存储引擎层实现。避免使用Null: 含有Null列会使索引,索引统计和值更为复杂。业务上有时需要一张完全独立的汇总表或缓存表主要用于满足检索的需求。分配空间: 根据实际需要分配.使用内存临时表或操作时会比较糟糕。索引是存储引擎用于快速查找记录的数据结构。更小: 选择不超过需求范围的最小类型。

929

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL的故事——创建高性能的索引

另外,其它不同类型的索引(例如哈希索引或者全文索引)也不会是B-Tree索引的冗余索引,而无论覆盖的索引列是什么。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。当InnoDB注意到某些索引值被使用的非常频繁时,它会在内存中基于B-Tree索引之上再创建一个哈希索引,这样就让B-Tree索引也具有哈希索引的一些优点,比如快速的哈希查找。要理解MySQL中索引是如何工作的,最简单的方法就是去看看一本书的“索引 ”部分:如果在一本书中找到某个特定主题,一般会先看书的“索引”,找到对应的页码。

weixin_45841848的博客 634

高性能MySQL笔记

Mysql

C/C++ 1220

【高性能MySQL】学习笔记第五章:创建高性能的索引

对每一行数据,存储引擎都会对其相应的值计算一个哈希码。哈希索引将所有哈希码存在索引中,同时哈希表中保存指向每个数据行的指针。要理解 MySOL中索引是如何工作的,最简单的方法就是去看看一本书的“索引”部分:如果想在一本书中找到某个特定主题,一般会先看书的“索引”,找到对应的页码。叶子结点包含指向下一个叶子结点的指针,所以整个数据也是一个链表,可以支持范围查询。都用过的字典举例,拼音查字、部首查字这些用到的就行拼音和部首的索引。上述例子是单列索引,多列索引则是增加了根据多个列的数据排序。

weixin_42645678的博客 250

高性能mysql 索引_高性能MySQL——创建高性能的索引

索引是存储引擎用于快速查找记录的一种数据结构。索引优化是对查询性能优化最有效的手段。1、索引的类型在MySQL中,索引是在存储引擎层而不是服务器层实现的。所以没用统一的索引标准,不同存储引擎的索引工作方式并不相同。B-Tree索引B-Tree索引即使用B-Tree数据结构来存储数据。B-Tree通常意味着所有值都是按顺序存储的,并且每个叶子页到根的距离相同。存储引擎已不同的方式来使用B-Tree索...

weixin_33979216的博客 190

高性能MySQL第三版笔记

第1章 MySQL架构与历史 1.1 MySQL逻辑架构 1.2 并发控制 1.2.1 读写锁 读共享,写互斥,写者优先读者 1.2.2 锁粒度 尽量只锁定需要修改的数据,而不是所有的数据。锁定的数据量越少,则系统的并发程度越高。 但是加锁也需要消耗资源。锁的操作,包括获取锁,检查锁是否已经解除,释放锁等,都会增加系统的开销。 所谓的锁策略,就是在锁的开销和数据的安全性之间寻求平衡,两种最重要的锁策略:表锁的行级锁。 表锁: 行级锁: 1.3 事务 事务是一组原子性的SQL查询,或者说一个独立的工作

qq_33898609的博客 1408

高性能MySQL第五章 学习笔记

索引优化是数据库查询性能优化最有效的手段,索引能够轻易地将查询性能提高几个数量级。这本书的第五章就在讨论如何建立一个“最优”索引。 一、索引类型 在MySql中,索引是在存储引擎层而不是服务器层实现的。 B-Tree索引 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VodbXBPN-1632586056831)(E:\study\个人学习笔记\高性能MySQL\6.png)] B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据。根节点的

weixin_41938314的博客 407

MySQL复习笔记六:InnoDB简介

所以我打算继续采用学习专研心态,以前人结论-抛出问题-理解问题-解答问题的方式,再辅以承上启下的方式,慢慢将这一块儿复习完,毕竟不完整的话,在心里会是一个梗,哪怕提到,有时都会感到难以启齿,因为自己确实没有深究过。),为了减少AHI的锁竞争问题,引入了分区的自适应哈希索引(Partitioned Adaptive Hash Index),它可以将AHI分割成多个部分,每个部分有自己的锁,从而减少并发访问时的锁等待时间。对于范围查询,尤其是那些涉及到多个页的查询,哈希索引可能不如B树索引有效。

长街的随心博客 985

MySQL 索引学习笔记

MySQL 索引学习笔记

m0_47396773的博客 1064

MySQL怎样创建高性能的索引

本文为《高性能MySQL(第三版)》一书的摘要总结 索引基础 索引优化是对查询性能优化最有效的手段。 索引可以包含多个列的值,如果索引包含多个列,列的顺序非常重要,因为MySQL只能高效使用索引的 最左前缀列。 索引类型 B-Tree索引 使用B-Tree(实际上是B+Tree)数据结构来存储数据。 可以使用B-Tree索引的查询类型: 全值匹配 和索引中的所有列进行匹配。 匹配最左列 匹配列前缀 只匹配某一列的值的前缀部分,后续查询条件将不会使用索引。 匹配范围值 匹配某一列的.

风萧水寒的博客 258
上一篇: 《高性能MySQL》 笔记之----"影子策略"
下一篇: 《高性能MySQL》笔记----前缀索引
小Z笔记
博客等级 码龄9年 11粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值