6 mysql索引_Mysql索引详解

索引

存储引擎用于快速找到记录的一种数据结构。

索引类型

索引有很多种类型,如:B-tree索引、哈希索引、空间数据索引R-TREE 、全文索引、主键索引等,在Mysql

中,索引是在存储引擎层而不是服务器层实现的。所以没有统一的索引标准——不同存储引擎的索引工作方式并

不一样,也不是所有存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层实现

也可能不一样。

B-Tree索引

讨论索引的时候,如果没有特别的指明类型,那么多半说的是B-Tree索引,它使用B-Tree数据结构来存储数据。

实际很多存储引擎使用的是B+Tree,即每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点

的范围遍历。

存储引擎不同的方式使用B-Tree索引,性能也各有不同,各有优劣。如:MyISAM使用前缀压缩技术使得索引更小,

但是InnoDB则按照原数据格式进行存储。 MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键

引用被索引的行

B-Tree索引查询类型

B-Tree适用于全键值、键值范围,或者键前缀查找。

哈希索引

Hash Index 基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算

一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,

同时在哈希表中保存指向每个数据行的指针。

InnoDB引擎有一个特殊功能叫“自适应哈希索引,当InnoDB某些索引值被使用得非常频繁时,也在内存中基于B-Tree索引之上

再创建一个哈希索引。这样就让Btree索引也具有哈希索引的一些优点。这是一个完全自动的,内部的行为,用户无法控制或者

配置,不过如果有必要完全可以关闭该功能。

创建自定义的Hash Index

SELECT id FROM url_tbl WHERE url="http://baidu.com"

SELECT id FROM url_tbl WHERE url_crc=CRC32("http://baidu.com")

如果采用这种方式,记住不要使用SHA1和MD5()作为哈希函数,因为这两函数计算出非常长的字符串,会浪费大量的空间,比较时

也会更慢。两函数设计目标是最大限度消除冲突,但这里并不需要这样高的要求。如果数据表非常大,CRC32会出现大量的哈希冲突,

则可以考虑自己实现一个简单的64痊哈希函数。

R-Tree

MyISAM引擎支持空间索引,可以用作地理数据存储。

全文索引

全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接索引中的值。全文搜索和其他几类索引的匹配方式完全不

一样。它有很多需要注意的,如停用词、词干、复数、布尔搜索等。

索引的优点

索引可以让服务器快速定位到表的指定位置。B-Tree索引,按照顺序存储数据,可以用于order by 和Group by 操作。因为数据是

有序的,所有B-tree也就会奖相关的列值存储在一起。优点如下:

索引大大减少了服务器扫描的数据量

索引可以帮助服务器避免排序和临时表

将随机IO变为顺序IO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值