基础-索引及其数据结构

索引

为了提高数据库中主键以外的列的搜索效率,所以可以对这些列建立索引,使得DBMS保存经过排序的列表,实现高效查找
1.改善检索性能,但是降低了数据插入,删除,修改时候的性能,在数据变动之后也必须动态更新索引,因此索引不适合建立在改动频繁的字段上,而且需要定期检查不断更新
2.占据大量的存储空间
3.利于数据过滤和排序的性能,经常ordered by就需要考虑建立索引了
4.索引可以建立在多个列的组合上

CREATE INDEX pro_name_id
ON PRODUCTS(prod_name)

MySQL有哪几种索引类型

1.哈希索引
InnoDB存储引擎支持的哈希索引是自适应的,,根据表的情况自动生成哈希索引,不能人为生成
2.B+树索引
目前关系型数据库查找最常用最有效的索引
他能找到的是被查找数据行所在的页,然后数据库把页读到内存里,再在内存中查找数据
3.全文索引

B+树

高度平衡,叶子存放数据,并且叶子间以双向链表的数据结构连接的多路平衡查找树

是由B树和索引的顺序访问方法演化来的,现实中几乎没有使用B树的情况了

他是为磁盘或者其他直接存取辅助设备而设计的一种多路平衡查找树

B+树的插入和删除操作

B+树索引

B+索引就是B+树在数据库中的实现,其中树的高度一般在2-4层,也就是说查找某一个键的行记录最低只需用2-4次的IO, 一般的机械键盘每秒100次IO,也就是说每次键值查询最多只需0.02-0.04s
B+树索引分为聚集索引和辅助索引

聚集索引
InnoDB中存储引擎表是索引组织表,表中数据按照主键的顺序存放,聚集索引就是按照每张表的主键构造一颗B+树叶子节点存放的就是这张表的行记录数据聚集索引的叶子节点叫数据页数据页之间通过双向链表进行连接,数据也是索引表的一部分

每张表只能有一个聚集索引,一棵B+树进行排序

优势:
一个就是物理上不必连续存储
再一个就是对于主键的排序查找和范围查找速度非常快
比如说在注册用户的表中查询最后10位注册的用户,可以快速找到最后一个数据页,一次读出10条;
又比如想找主键某一范围内的数据,通过叶子节点的上层中心节点就可以得到页的范围

聚集索引的存储是逻辑上连续的,不是物理上连续的,表现在
第一:数据页也就是节点之间用双向链表链接,页按照主键的顺序排序
第二:每个数据页中的数据记录也是用双向链表维护的,物理存储可以同样不连续

辅助索引(也称非聚集索引)
叶子节点不包含行记录的全部数据,除了包含键值外,还包含一个书签,书签告诉存储引擎InnoDB哪里可以找到与索引对应的行数据,他的辅助索引的书签就是对应行数据的聚集索引键

一张表可以有多个辅助索引,跟聚集索引不影响,可以用作快速定位到某一行数据,使用辅助索引寻找数据时,InnoDB存储引擎会遍历辅助索引然后通过叶节点的书签指针获得主键索引的主键,再通过聚集索引树的搜索找到这个主键对应的行记录

哈希索引

InnoDB存储引擎用的是哈希算法,哈希函数是取余操作,冲突机制采用链表结构
哈希索引只能用来进行等值查询,对于范围查询只能逐个搜索

全文索引

全文索引顾名思义就是对数据库中存在的任意内容信息查找出来,而不是仅仅根据字段找到某一行数据,比如LIKE语句,对内容进行模糊查询

语句:
SELECT * FROM fts_a
WHERE MATCH(body)
AGAINST ("abc" IN NATURAL LANGUAGE MODE)---全文索引关键字

1.倒排索引
全文索引通常是使用倒排索引来实现的,他在辅助表中存储单词和单词自身存放的位置的这样一个映射,用关联数组来实现的,结构是单词加上单词所在的文档的ID和文档中位置的组合

2.InnoDB存储引擎中的全文搜索
全文搜索表有两列,一列是word一列是ilist,ilist包含了文档ID和对应位置
一是采用倒排索引来实现,他的内部有六张辅助表存放在磁盘上,每张表根据单词内容的latin编码进行分区;

二是FTS索引缓存来提高全文索引的性能
他是采用红黑树的数据结构,他根据word,ilist进行排序,在插入时就进行更新,然后存储引擎会批量对辅助表进行更新

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342