Mysql索引整理


最左匹配

多列索引,索引的最前面字段始,接着往后,中不能跳比如建了多列索引(name,age,sex),会先匹配name字段,再匹配age字段,再匹配sex字段的,中不能跳

mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。

B+左到右的序来建立的,所以索数也是左到右的序来索的。

合索引 < a, b, c > , a、b、c均表中一列。

abc建立索引相当于a,ab(ba),abc建立索引(序可以乱,但要有a

据 举 例  使 用 索 引  a , 匕 c  a , 匕 c  因 为 缺 失 匕 索 引 , c 索 引 不 会 使 用  1 囗 1 囗  北  因 为 缺 失 a 索 引 , 匕 c 索 引 不 会 使 用  北  因 为 缺 失 a 索 引 , 匕 c 索 引 不 会 使 用  北  因 为 缺 失 a , 匕 索 引 , c 索 引 不 会 使 用

 

索引

逻辑角度

  • 索引:主索引是一特殊的唯一索引,不有空
  • 普通索引或者列索引:个索引包含个列,一个表可以有多个列索引
  • 多列索引(合索引、合索引):合索引指多个字段上建的索引,有在查询条件中使用了建索引的第一个字段,索引才会被使用。使用合索引遵循最左前集合
  • 唯一索引
  • 全文索引

 

结构的角度

  • B+索引:最常的索引型,基于B+结构(InnoDB和MyISAM引、memory引)
  • Hash索引:基于hash表,所以支持精确查找(时间复杂度O(1)),不支持范围查找(Memory引)
  • 全文索引:主要用来查找文本中的关键字(MyISAM,InnoDB)
  • 索引:基于R树实现,用于地理数(MyISAM)

 

物理存角度

  • 索引:表中记录的物理序与键值的索引序相同,数就是索引
  • 索引:表中记录的物理序与键值的索引序不相同 Mysql中InnoDB引的主索引索引,MyISAM存采用非索引

 

 

见问题

使用B+树呢

  • b+的高度固定,可以有的控制io次数,并且在一个中可以存更多的索引
  • 非叶子能存索引,叶子点才存。叶子点是照大小排序的,比便于查找范围查询更好。
  • 索引和数更多的索引存在内存中。

 

13  Zhao  2015  name″1羹簇寮  引(B+?)  ?簇*引  豳?上的  2016  lisi  2015  ?10?  2016

 

的数存在于叶子点;

非叶子点不存指引索方向的数

 

不用其他数结构

平衡二叉搜树过格在入数可能要行大量的数

红黑树的深度大,数造成磁IO

B-Tree和红黑树对查询并不友好

 

索引的好

避免Innodb表行索引的二次查询

Innodb是以集索引的序来存的,于Innodb来,二索引在叶子点中所保存的是行的主信息,

如果是用二索引查询,在查找到相键值后,要通键进行二次查询才能取我所需要的数。而在覆索引中,二索引的键值中可以取所有的数,避免了的二次查询 少了IO操作,提升了查询率。