14-mysql索引类型与数据存储
2019-11-13 本文已影响0人
七层茅草屋
六星教育 - java-mysql优化1909
一、innodb索引和myisam索引存储数据的区别
- .frm共用数据结构
- myisam特点数据与索引分开存储
1> MYD:存储数据,MYI:存储索引
2> 普通索引和主键索引都是指向实际数据在磁盘中的存储位置 - innodb特点数据和索引没有分开
1> .idb , .ibdata
2> innodb索引是找->主键字段的索引再->通过主键字段去找实际磁盘存储位置
3> innodb所有默认索引就是与主键作为联合索引
idx_gender(gender) =>idx_gender(gender, id) //实例
在innodb中就是通过索引来实现行锁,不加索引就会转化为表锁
二、索引类型
- 主键索引:就是我们的主键
- 唯一索引:一个唯一字段建立的索引效率较高,唯一字段建立的索引一般为单索引
- 单索引:单个字段建立的索引
- 联合索引:多个字段建立的索引
- 全文索引:针对于中文进行分词的搜索
- 覆盖索引:是所有查询sql中追求的索引效率的完美使用:直接根据索引获得数据,不需要再去磁盘中读取数据
三、回表
- 主要是普通索引问题,innodb
- sql查询的时候使用到普通索引,获取数据只要不存在与索引中的情况就会出现回表
- 回表:通过普通索引再去查主键索引,最后到磁盘中查询数据
四、hash索引
- MySQL根据字段进行hash计算->生成字符串:磁盘数据地址
- xxxx(字段) => hash算法 => 32,64字符串
- 使用:
1、join查询的关联
2、单独唯一条件查询
3、字段少于其他的字段关联查询 - 特点:无序,离散,效率高,但不能进行范围查询
- 创建联合hash索引,必须字段都要有
- 根据查询字段的频率创建,这是由innodb自己完成