B-Tree索引与hash索引的区别

在这里插入图片描述

索引的优点:

  1. 索引大大减少了服务器需要扫描的数据量。
  2. 索引可以帮助服务器避免排序和临时表。
  3. 索引可以将随机 I / O变为顺序 I / O

B-tree索引

B-tree索引的优点:
  1. B-tree索引通常意味着所有的值都是按着顺序存储的,并且每一个叶子页到根的距离相同。
  2. B-tree索引能够加快访问数据的存储,因为索引的存储引擎不再需要进行全表扫描来获取需要的数据。
  3. B-tree对索引列是顺序组织存储的,索引很适合进行范围查找。
  4. B-tree索引适用于全键值、键值范围或前缀查找。
匹配规则解释
全值匹配全值匹配指的是和索引中的所有列进行匹配,
匹配最左前缀即只是用索引的第一列,按索引顺序的第N列。
匹配列前缀也就是匹配某一列的值的开头部分。
匹配范围值例如 select id from teble where id between 3 and 5;
精确匹配某一列并范围匹配另外一列例如:第一列全匹配,第二列范围匹配
只访问索引的查询B-Tree通常可以支持“只访问索引的查询”,即查询只需要访问索引,而无须访问数据行(即覆盖索引)的优化。

注释:下图展示了B-Tree索引的抽象表示,大致反映了InnoDB索引时如何工作的。MyISAM使用的结构有所不同,但基本思想是类似的。
在这里插入图片描述

Hash索引(Memory引擎支持)

基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code)。哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不同,同时哈希表中保存指向每个数据行的指针。
哈希索引的优点:
  1. 哈希索引只包含哈希值和行指针,而不存储字段值
  2. 哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。
  3. 哈希索引不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。
  4. 哈希索引只支持等值比较查询,包含=、in( )、<=>,也不支持范围查询。
  5. 访问哈希索引的数据非常快,除非有很多哈希冲突(不同的索引列值却出现相同的哈希值)。当出现哈希冲突时,逐行进行比较,知道找到所有符合的行。
  6. 如果哈希冲突很多的话,一些索引 维护操作的代价也会很高。例如:如果在某个选择性很低(哈希冲突很多)的列上建立索引,那么当从表中删除一行时,存储引擎需要遍历对应哈希值的链表中的每一行,找到并删除对应行的引用,冲突越大,代价越大。
哈希索引的适用场景:星型、schema、需要关联很多查找表、哈希索引就非常适合查找表的需求。

InnoDB的“自适应哈希索引”

InnoDB引擎有一个特殊的功能叫做“自适应哈希索引”,当InnoDB注意到某些所引致被适用得非常频繁时。它会在内存中基于B-Tree索引之上再创建 一个哈希索引,这样就让B-Tree索引也具有哈希索引的一些优点,比如快速的哈希查找。
# 创建表
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)
);
# 设置触发器  插入数据时添加url_crc字段的值
delimiter //
CREATE TRIGGER pseudohash_crc_ins BEFORE INSERT ON pseudohash FOR EACH ROW BEGIN
SET NEW.url_crc=CRC32(NEW.URL);
END;
//
# 设置触发器 更新数据时更改url_crc字段的值
CREATE TRIGGER pseudohash_crc_upd BEFORE UPDATE ON pseudohash FOR EACH ROW BEGIN
SET NEW.url_crc=CRC32(NEW.url);
END;
//

DELIMITER ;

INSERT INTO pseudohash (URL) VALUES ('http://www.mysql.com');
SELECT * FROM pseudohash;
# 对于哈希值相同的数据可以select * from pseudohash where url=xxx and url_crc = xxx; 

空间数据索引(R-tree)

MyIASM表支持空间索引,可以用于地理数据存储。无需前缀查询。空间索引会从素有维度来索引数据。查询时,可以有效的使用任意维度来组合查询。必须使用MySQL的GIS相关函数。

全文索引

全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是查找比较索引中的值。全文索引适用于MATCH、AGAINST操作,而不是普通的where条件查询。

索引的介绍:
https://blog.csdn.net/weixin_43932609/article/details/105421427
查重与去重:
https://blog.csdn.net/weixin_43932609/article/details/105916869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像豆芽一样优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值