存储引擎指表的类型及表在计算机上的存储方式。
主要的存储引擎有InnoDB、MyISAM、Memory等。
• frm文件:存储表的定义数据
• MYD文件:存放表具体记录的数据
• MYI文件:存储索引
先加载MYI文件,其中存放索引,找到对应地址之后,将MYD文件加载到内存,根据刚才得到的地址找到对应行数据,返回给用户。
上图是MyISAM主键索引,设表一共有三列,假设我们以Col1为主键。
如果在Col2上建立一个辅助索引,如图
同样data域存放数据记录的地址,但辅助索引的key可以重复。
因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。
将数据存在内存
默认的数据库存储引擎。
InnoDB也使用B+树作为索引结构,但区别在于InnoDB的数据文件本身就是索引文件,InnoDB辅助索引的data域存储相应记录主键的值而不是地址。
InnoDB的表数据文件本身就是按B+树组织的一个数据结构,树节点data域保存完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。
InnoDB的所有辅助索引都引用主键作为data域。例如,下图为定义在Col3上的一个辅助索引:
辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得数据记录。
InnoDB索引和MyISAM索引的区别:
主索引的区别:InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。
辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。