首页 > 数据库 >MySQL中的BTREE索引和HASH索引

MySQL中的BTREE索引和HASH索引

时间:2023-02-07 10:55:20浏览次数:39  
标签:HASH utf8mb4 mid 查询 索引 Hash BTREE

MySQL中索引的存储类型有两种:BTREE和HASH
MYISAM和InnoDB存储引擎只支持BTREE索引;MEMORY和HEAP存储引擎支持BTREE和HASH索引。
一、使用索引的原因
1.减少了存储引擎需要扫描的数据量,加快查询速度
2.可以把随机I/O变为顺序I/O
3.对所搜结果进行排序,避免使用磁盘临时表

CREATE TABLE `manager`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '管理员序号id',
  `mid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '管理员账号',
  `mname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '管理员姓名',
  `mpassword` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '管理员登录密码',
  `status` int(1) NOT NULL DEFAULT 1 COMMENT '状态、等级',
  PRIMARY KEY (`mid`) USING BTREE,
  INDEX `id_mid`(`id`, `mid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

二、BTREE索引
1.特点:
  BTREE索引以B+树结构存储数据,大大加快了数据的查询速度
  BTREE索引在范围查找的SQL语句中更加合适(顺序存储)
2.使用场景

  • 全值匹配的查询,如where mid = ‘1004’  
  • 联合索引最左前缀匹配原则,如联合索引key id_mid(id,mid) USING BTREE,只要条件中使用了联合索引的第一列,就会用到该索引。如果使用的是第二列mid,则该SQL不会使用到该联合索引(除覆盖索引外)
  • 右模糊查询,如where mid like '10%'(%10和%10%均会索引失效)
  • 范围值查询,如where create_date > '451235' (not in和<>无法使用索引)
  • 普通的全值匹配、最左前缀匹配、范围查询、order by排序等都能用到Btree索引;负向查询比如不等于和not in、非最左前缀匹配查询不会用到Btree索引;

三、HASH索引

特点:

  • Hash索引基于Hash表实现,当查询条件精确匹配Hash索引中所有列才会用到Hash索引(非顺序存储)
  • 存储引擎会计算Hash索引中每一列的hash码,因此每次读取都会进行两次查询
  • Hash索引无法用于排序,使用于等值匹配查询

参考资料:

 https://www.cnblogs.com/rxbook/p/10648796.html
https://blog.csdn.net/fanrenxiang/article/details/81781283

标签:HASH,utf8mb4,mid,查询,索引,Hash,BTREE
From: https://www.cnblogs.com/gamepen/p/17097625.html

相关文章

  • 572. Subtree of Another Tree[Easy]
    572.SubtreeofAnotherTreeGiventherootsoftwobinarytreesrootandsubRoot,returntrueifthereisasubtreeofrootwiththesamestructureandnodev......
  • 【算法训练】Hash的应用
    Hash的应用当数据较为庞大,但是数据的数量是有限范围内的,各不相同的。例题题目描述给你n个整数,请按从大到小的顺序输出其中前m大的数。输入每组测试数据有两行,第一行有两个......
  • <ORACLE NOTE> 1. Partition table Management --- 分区表分区索引重建
    SELECT'alterindex'||t2.owner||'.'||t1.INDEX_NAME||'rebuildpartition'||t1.PARTITION_NAME||'online;',t1.STATUSFROMdba_ind_partitionst1,dba_indexest2......
  • ElasticSearch分布式搜索引擎——从入门到精通
    ES分布式搜索引擎注意:在没有创建库的时候搜索,ES会创建一个库并自动创建该字段并且设置为String类型也就是text什么是elasticsearch?一个开源的分布式搜索引擎,可以用......
  • php操作ElasticSearch搜索引擎流程详解
    目录一、安装二、使用三、新建ES数据库四、创建表五、插入数据六、查询所有数据七、查询单条数据八、搜索九、测试代码〝古人学问遗无力,少壮功夫老始成〞......
  • Hash散列表
    定义散列是一种数据处理方法,通过散列函数将原数据生成为一种更易于存储的数据。使用散列表可以提高比较数据的效率。散列函数:将原数据传给它并进行处理,处理完成......
  • 1.6 通过地址和索引实现数组
    CPU会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。数组是指同样长度的数据在内存中进行连续排列的......
  • 深入理解前端中的 hash 和 history 路由
    我们在使用Vue或者React等前端渲染时,通常会有hash路由和history路由两种路由方式。hash路由:监听url中hash的变化,然后渲染不同的内容,这种路由不向服务器发送......
  • 为什么重写了 equals 还要重写 hashCode
    目录1.先说一下为什么要重写equals方法?2.再说为什么还要重写hashCode方法?借鉴:https://blog.csdn.net/weixin_44061521/article/details/128194172日期:2023年2月4日......
  • python基础:pycharm的安装、pycharm软件的使用、python语法之注释、PEP8规范、变量与常
    目录一、pycharm的安装1、软件介绍2、正版安装1.下载软件2.安装软件3、其他方法安装(需要先下载相关资源)①无限试用法②傻瓜式激活法③淘宝购买二、pycharm软件的使用1.创建......