MySQL都有哪些索引类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL都有哪些索引类型相关的知识,希望对你有一定的参考价值。
主要有这些:PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。 参考技术A B-Tree索引:
B-Tree索引是被大多数mysql存储引擎支持的,在我们讨论索引时,假如没有特别地说明类型,那么大概率说的就是B-Tree索引了。我们使用B-Tree这个词,是因为MySQL在创建表和其他语句中就使用这个关键字。
然而,在不同存储引擎的底层可能使用不同的数据结构和算法,比如:InnoDB存储引擎内部使用的是B+Tree结构,NDB集群存储引擎内部使用的是T-Tree结构。不同存储引擎用以不同的方式使用B-Tree索引,性能也可能不同,比如:InnoDB的索引上存储的是元数据格式,而MyISAM存储引擎使用前缀压缩技术使索引更小,InnoDB索引的行存储的数据行的主键引用,而MyISAM存储引擎的索引的行存储的是数据行的物理位置。
B-Tree索引的用法:
根据B-Tree索引的特点,它可以用于全值匹配、值范围匹配和最左前缀匹配。
全值匹配是指和索引中所有的字段进行匹配,比如:查询黑龙江省哈尔滨市南岗区的数据。值范围匹配是指索引中字段的某一范围进行匹配,但是必须满足前面字段的全匹配,比如:第一个字段province_name省名称的全匹配,第二个字段city_name城市名称的范围匹配。最左前缀匹配是指索引中字段的某一开头部分进行匹配,但是必须满足前面字段的全匹配,比如:第一个字段province_name省名称为内蒙古,第二个字段city_name城市名称以“呼”开头。
哈希索引:
哈希索引是基于哈希表实现的,用于精确匹配索引所指向的数据。存储引擎对每一行数据的所有索引字段计算出一个哈希码,哈希码是一个比较小的值,并且不同的数据计算出来的哈希码一般情况下也不一样。哈希索引中存放了这个哈希码和指向这个数据行的指针。
在MySQL中,只有Memory存储引擎支持哈希索引,也是Memory存储引擎的默认索引类型。另外,在InnoDB存储引擎中也运用了哈希索引,叫做自适应哈希索引。当某些索引中被非常频繁的使用时,InnoDB存储引擎会在内存中基于B-Tree索引之上再创建一个哈希索引,这样一来使得B-Tree索引也具有的快速哈希查找的优点。
哈希索引因为只需存放对应数据的哈希值,所以索引的结构非常紧凑,占用空间小,同时查询速度也非常快。不过,哈希索引只支持全值等值查询,不能索引字段范围匹配和部分索引字段匹配。
空间数据索引:
空间数据索引(R-Tree)主要用于地理数据的存储,会从所有维度来索引数据,查询时可以有效的使用任意维度进行组合查询。 目前,MyISAM存储引擎支持空间数据索引,不过必须使用MySQL的GIS相关的函数来维护数据。
在MySQL中,空间索引只能建立在空间数据类型上,如:GEOMETRY、POINT、LINESTRING等。
全文索引:
全文索引不像之前介绍的索引那样直接比较索引中的值,而是直接比较查找的文本中的关键词,它类似于搜索引擎做的事情,不是简单的where条件匹配。
在相同的字段上,可以同时创建全文索引和B-Tree索引,不会有冲突。全文索引适用于match和against操作,不是普通的where条件操作。在MySQL中,只能在类型为CHAR、VARCHAR、TEXT的字段上创建全文索引。
关系数据库中,索引的作用主要有哪些,一般什么情况下需要建索引?并简述索引都有哪几种类型,有何区别
提高查询速度,有利于排序和分组. (排序和分组如用不上索引,则会产生临时表和filesort的过程)
根据业务逻辑,分析列查询的频度和顺序, 建立索引和复合索引.
主键索引(primary key), ---->不需要有索引名,因为只有一个主键索引
唯一索引(unique key)
---->unique key email(email(10))
括号里面是表字段,外面是索引名字,其他索引一样
里面的10是指索引的长度,如[email protected],只取出了前面10个字符做索引
普通索引(key),
全文索引(fulltext key)--->中文环境下基本无效,一般用第三方方案如sphinx(中文分词)
多列索引:key xm(xing,ming)用xing和ming两个字段做索引
冗余索引:在某个字段上有多个索引,如 key xm(xing,ming) ,key m(ming),有两个 就是冗余索引
以上是关于MySQL都有哪些索引类型的主要内容,如果未能解决你的问题,请参考以下文章