聚簇索引、全文索引与哈希索引

(1)、聚簇索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。

术语“聚簇”表示数据行和相邻的键值进错的存储在一起。

如下图,左侧的索引就是聚簇索引,因为数据行在磁盘的排列和索引排序保持一致。

聚簇索引的好处:

按照聚簇索引排列顺序,查询显示一定范围数据的时候,由于数据都是紧密相连,数据库不用从多个数据块中提取数据,所以节省了大量的io操作。

聚簇索引的限制:

对于mysql数据库目前只有innodb数据引擎支持聚簇索引,而Myisam并不支持聚簇索引。

由于数据物理存储排序方式只能有一种,所以每个Mysql的表只能有一个聚簇索引。一般情况下就是该表的主键。

为了充分利用聚簇索引的聚簇的特性,所以innodb表的主键列尽量选用有序的顺序id,而不建议用无序的id,比如uuid这种。

主键索引为何采用自增的方式:1、业务需求,有序。2、能使用到聚簇索引

(2)、全文索引

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。

CREATE TABLE `article` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `title` varchar(200) DEFAULT NULL,  `content` text,  PRIMARY KEY (`id`),  FULLTEXT KEY `title` (`title`,`content`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

不同于like方式的的查询:

SELECT * FROM article WHERE content LIKE ‘%查询字符串%’;

全文索引用match+against方式查询:

SELECT * FROM article WHERE MATCH(title,content) AGAINST (‘查询字符串’);

 明显的提高查询效率。

 限制:

MySQL5.6.4以前只有MyISAM支持,5.6.4版本以后INODB才支持,但是官方版本不支持中文分词,需要第三方分词插件,5.7以后官方支持中文分词。

随着大数据时代的到来,关系型数据库应对全文索引的需求已力不从心,逐渐被 solr,elasticSearch等专门的搜索引擎所替代。

(3)、哈希索引

Hash索引只有Memory, NDB两种引擎支持,Memory引擎默认支持Hash索引,如果多个hash值相同,出现哈希碰撞,那么索引以链表方式存储。

NoSQL采用此中索引结构。

全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务