mysql--索引分类

索引的分类(存储结构):

        ①BTree索引(MySQL使用B+Tree):

B-Tree索引结构


B+Tree索引结构

        B+Tree是B-Tree的改进版本,同时也是数据库索引索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。相比B-Tree来说,进行范围查找时只需要查找两个节点,进行遍历即可。而B-Tree需要获取所有节点,相比之下B+Tree效率更高。

        ②hash索引:

        在memory表(内存表)中,默认使用的是hash索引。

        1.hash索引只包含哈希值和行指针,而不存储字段值 2. hash索引无法用于排序 3. 只支持等值比较查询 4 查询速度很快,但是某些情况下维护代价很高。


索引的分类(应用层次):

    ①单列索引: (主键索引,普通索引,唯一索引 )

        主键索引:就是特殊一点的唯一索引,关键字 PRIMARY

                  alter table 表名 add PRIMARY KEY (索引针对的列)     

        普通索引:由关键字 KEY 或 INDEX 定义的索引,其唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = )或排序条件(ORDER BY column)中的数据列创建索引。

                  create  index 索引名称 on 表名(列名)

        普通索引常见误区:例如我们要查询第3个栏目,100元以上的商品  where cat_id=3 and price>100 ;  错误的做法是在cat_id上和price上都加上索引.实际上这只能用上cat_id或Price索引,因为都是独立的索引,同时只能用上1个

        唯一索引:和普通索引基本类似,不过唯一索引所在的列可以为null值。唯一索引所在的列不能为空字符串

                  create unique index 索引名称 on 表名(列名)

    ②组合索引:

        关键字是MultiIdx。在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。例如索引是key index (a,b,c). 可以支持| a,b a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

                  ALTER TABLE 表名  ADD INDEX 索引名称  (列名1,列名2);

        例如:某个表有一个联合索引(c1,c2,c3,c4)

            1    where c1=x and c2=x and c4>x and c3=x               

        等价于 c1=x and c2=x and c3=x and c4>x

            2    where c1=x and c2=x and c4=x order by c3            

        c1 ,c2索引用上了,在c2用到索引的基础上,c3是排好序的,因此不用额外排序.而c4没发挥作用.

            3    where c1=x and c4= x group by c3,c2

        只用到c1索引,因为group by c3,c2的顺序无法利用c2,c3索引

            4    where c1=x and c5=x order by c2,c3

        c1确定的基础上,c2是有序的,C2之下C3是有序的,因此c2,c3发挥了排序的作用.

    ③全文索引:

        索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建

                  ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名 ( 列名);

        SELECT * FROM 表名 WHERE 列名 LIKE '%查询字符串%'                                             (效率低)

        SELECT * FROM 表名 WHERE MATCH (列名1, 列名2)AGAINST('查询字符串')              (效率高) 


索引的分类(数据存储方式):

    ①聚簇索引:

            Innodb中,主键的索引结构中,既存储了主键值,又存储了行数据,这种结构称为”聚簇索引”

                1主键索引 既存储索引值,又在叶子中存储行的数据

                2如果没有主键, 则会Unique key做主键

                3如果没有Unique,则系统生成一个内部的rowid做主键

            优势:根据主键查询条目比较少时,不用回行(数据就在主键节点下)

            劣势:节点下存储了行数据,分裂的时候还要移动行数据。如果碰到不规则数据插入时,造成频繁的页分裂.

    ② 非聚簇索引: 

            myisam中, 主索引和次索引,都指向物理行(磁盘位置)。因此大数据量查询速度相对较快

            想对比于Innodb来说,myisam节点存储的物理行地址,内容较小又缓存在内存里,分裂速度要快很多


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

推荐阅读更多精彩内容

  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,156评论 0 33
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,790评论 5 116
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,714评论 0 44
  • 文 / 长木云伊 今日无紧要任务,偶然发现国外所做分析报告,与之前我做的是同一个项目。下载学习之余,看到差距,并努...
    莫嗔堂堂主阅读 370评论 0 0
  • 关于数组越界的系统崩溃的问题 小伙伴门经常见到这个崩溃日志吧!! 能不能不不让系统不直接崩溃,进而影响用户体验!!...
    九林阅读 372评论 1 1