Myisam和innoDB索引的区别

在的MySQL中,主要有四种类型的索引,分别为:B树索引,散列索引,全文索引和R树索引我们主要分析B树索引.B树索引是MySQL的数据库中使用最为频繁的索引类型,除了档案存储引擎之外的其它所有的存储引擎都支持B-Tree索引.Archive引擎直到MySQL 5.1才支持索引,而且只支撑索引索个个AUTO_INCREMENT列。不仅仅在MySQL中是如此,实际上在其他的很多数据库管理系统中的B树索引也同样是作为最主要的索引类型,这主要是因为B-树索引的存储结构在数据库的数据检索中有非常优异的表现。一般来说,MySQL中的B-Tree索引的物理文件大多都是以Balance Tree的结构来存储的,也就是所有实际需要的数据都存放于Tree的Leaf Node(叶子节点),而且到了任何一个Leaf Node的最短路径的长度都是完全相同的,所以我们大家都称之为乙树索引。当然,可能各种数据库(或MySQL的的的各 存储引擎)在存放自己的B-Tree索引的时候会对存储结构稍作改造。如Innodb存储引擎的B-Tree索引实际使用的存储结构实际上是B + Tree,也就是在B-Tree数据结构的节点相关的后一个叶节点的指针信息,这主要是为了加快检索多个相邻叶节点的效率考虑下面主要讨论的MyISAM和InnoDB的两个存储引擎的索引实现方式:1.MyISAM索引引用文件和数据文件是分离的,索引文件仅保存数据记录的地址.1)主键索引:MyISAM的引擎使用B +树作为索引结构,叶节点的数据域存放的是数据记录的地址下图是MyISAM的主键索引的原理图:( 图myisam1)

这里设表一共有三列,假设我们以Col1为主键,图myisam1是一个MyISAM表的主索引(主键)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址.2)辅助索引(二级密钥)在MyISAM中,主索引和辅助索引(二级密钥)在结构上没有任何区别,只是主索引要求密钥是唯一的,而辅助索引的密钥可以重复。如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示:。同样也是一颗B +树,数据域保存数据记录的地址因此,MyISAM数据中索引检索的算法为首先按照B +树搜索算法搜索索引,如果指定的关键存在,则取出其数据域的值,然后以数据域的值为地址,读取相应数据记录.MyISAM 的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。2. InnoDB的实现索引然InnoDB的也使用B +树作为索引结构,但具体实现方式却与MyISAM的截然不同。1)主键索引: MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B +树组织的一个索引结构,这棵树的叶节点数据域保存了完整的数据记录。这个索引的关键是数据表的主键,因此InnoDB表数据文件本身就是主索引。 (图inndb主键索引)

(图inndb主键索引)是InnoDB的主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB中的数据文件本身要按主键聚集,所以InnoDB的要求表必须有主键(MyISAM的可以没有),如果没有显式指定,则MySQL的系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL的自动为InnoDB的表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形.2).InnoDB 的辅助索引 InnoDB的所有辅助索引都引用主键作为数据域。例如,下图为定义在Col3上的一个辅助索引: InnoDB表是基于聚簇索引建立的。因此InnoDB的索引能提供一种非常快速的主键查找性能。不过,它的辅助索引(Secondary Index,也就是非主键索引)也会包含主键列,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上 义,很多索引,则争取尽量把主键定义得小一些.InnoDB不会压缩索引。 文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录 不同存储引擎的索引实现方式对于正确使用状语从句:优化索引都非常有帮助,例如知道了的InnoDB的索引实现后,就很容易明白1,为什么不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,如图2所示,用非单调的字段作为主键在InnoDB的中不是个好主意,因为InnoDB的数据文件本身是一颗B +树,非单调的主键会造成在插入新记录时数据文件为了维持B +树的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择。

InnoDB的中的索引和MyISAM的数据的索引的区别:一是主索引的区别时,InnoDB的的的数据文件本身就是索引文件而MyISAM数据的数据的索引和数据是分开的二是辅助索引的区别:InnoDB的的的的辅助索引数据域存储相应记录主键的值而不是地址。而MyISAM数据的数据的辅助索引和主索引没有多大区别。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值