mysql索引学习笔记(聚簇索引与非聚簇索引、B+Tree索引与hash索引区别)

一、索引是一种数据结构,使得MySQL阔以高效的查询数据

 

        索引的数据结构一般有以下B+Tree索引hash索引

 

     1.1: B+Tree:B+Tree是一种节点有序的数据结构,根节点只存放对应的索引和指针,只有叶子节点才会存放数据;存放数据的方式又跟数据表所使用的不同存储引擎而不同;主要有MyISAMInnoDB两种存储引擎

 

      1.1.1: 如果表使用的是MyISAM存储引擎,B+Tree叶节点的data域存放的是数据记录的地址,在索引检索的时候,首先按照 B+Tree搜索算法搜索索引,如果指定的key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录(即索引文件和数据文件是分离的);这样的索引也被称为非聚簇索引

 

      1.1.2:如果表使用的是InnoDB存储引擎,数据文件本身就是索引文件(即索引文件和数据文件不分离),树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,InnoDB表数据文件本身就是主索引。这既是被称为聚簇 索引;而这张表其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址;在根据主索引搜索的 时候,直接找到key所在的节点即可取出数据;再根据辅助索引查找时,则需要先取出主键的值,因此,在设计表的时候不建议使用过长的字段作为主键,一般建议使用整型自增数据(方便B+Tree数据结构比较排序)

 

 

mysql索引学习笔记(聚簇索引与非聚簇索引、B+Tree索引与hash索引区别)_第1张图片

 

     1.2:hash表:hash索引即是对所要查询的索引列进行一次hash值计算,能直接定位所查询的数据,一般适合单条记录查                               询,效率

 

       1.3:hash索引与B+Tree区别:hash索引适合单条记录查询,不适合范围查询和模糊查询B+Tree索引则反之

 

你可能感兴趣的:(mysql)