索引的概念与类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引的概念与类型相关的知识,希望对你有一定的参考价值。

参考技术A 索引在mysql之中也被称为“键(key)”是存储引擎用于快速找到记录的一种数据结构。 

索引有很多类型,可以为不同的场景提供更好的性能。在mysql中,索引是在存储引擎层而不是服务器层实现的。所以不同的存储引擎的索引的工作方式是不同的,也不是所有的存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层的实现也是不同的。

        这里引用维基百科的定义: B树 (英语:B-tree)是一种自平衡的 树 ,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在 对数时间 内完成。B树,概括来说是一个一般化的 二叉查找树 (binary search tree),可以拥有多于2个子节点。与 自平衡二叉查找    树 不同,B树为系统大块数据的读写操作做了优化。B树可以减少定位记录时所经历的中间过程,从而加快存取速度。

         大多数时候人们在提到索引但如果特别指明索引的类型的时候,人们指的是 B-TREE 索引。

        B-TREE 通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离都相同

        B-TREE 索引能够加快访问数据的速度,是因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始搜索。

        B-TREE 对索引列是顺序组织存储的,所以很适合查找范围数据

        哈希索引是基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码( hash code ) 哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

        和B-Tree索引不同,这类索引无须前缀查询。空间索引会从所有维度来索引数据。查询时,可以有效地使用任意维度来组合查询。必须使用 MySQL 的 GIS 相关函数如 MBRCONTAINS() 等来维护数据。但mysql对GIS的支持目前还不完善,不建议使用。

   全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值。全文搜索和其他几类索引的匹配方式完全不一样。它有许多需要注意的细节:如停用词,词干,和复数,布尔搜索等。全文索引更类似于搜索引擎做的事情,而不是简单的where条件匹配。全文索引适用于MATCH AGAINST操作。

MySQL的一些重要概念

MySQL的一些重要概念

1、索引、主键(primary key)、唯一键(unique)的区别

1)主键就是索引与唯一的结合

2)索引是为了让数据检索更快。

3)唯一键约束此字段不能有相同值,这样能优化索引。

4)全文搜索是为了like关键字设计的

2、合理建立索引的建议:

1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。

2)简单的数据类型更好整型数据比起字符串,处理开销更小,因为字符串更复杂。在 MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;存储IP地址应该用整型数据类型。

3尽量避免NULL应该指定列为 NOT NULL,除非你存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。应该用0、—个特殊的值或者个空字符串代替空值。

3、使用索引的优缺点

 

 

 

以上是关于索引的概念与类型的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的一些重要概念

ElasticSearch核心概念与REST风格说明

Mysql(10)—索引的概念以及MySQL七种索引类型

学习笔记ElasticSearch(ES)基本概念和语句学习笔记

Elasticsearch学习笔记2:ES核心概念 -- 索引倒排索引类型文档

Elasticsearch学习笔记2:ES核心概念 -- 索引倒排索引类型文档