日期:2014-05-16  浏览次数:20347 次

数据库索引学习笔记

网上有很多大神对数据库索引做了详细的教程,这里只是记录一些细节和自己的理解。

?

1.索引的构成

  • ? ?innodb使用b+ tree做索引结构,MyIsam使用B-tree做索引结构。
  • ? ?MyIsam的索引和data文件是分离的,即通过索引文件查到数据在data文件中的物理地址再寻址查询数据,而Innodb的索引和data文件是在一起的。
  • ? ?Innodb选择B+tree的好处在于B+tree把数据节点放到叶子节点,非叶子节点只存放下一个子节点的地址,虽然会使每一次查询都需要访问到叶子节点,但因为非叶子节点不再存放实际数据地址,有更多的空间存放下更多的索引值。这样就能一次读取更多的索引值,减少IO次数。提升查询效率。(B树和B+树区别)
  • 读取数据的时间由寻址时间+等待时间(IO WAIT)+数据传输时间构成,而寻址时间是最慢的。所以数据会尽量存放在同一柱面,同一磁道,同一磁片。

2.索引的类型

  • ? ?单一索引。即只有一列用于构成索引
  • ? ?组合索引。即有多列共同构成索引。组合索引的每个索引key由组成索引的列共同构成,如index(name,age),则索引为(name,age);mysql在构建b树的时候是根据第一列为准的大小顺序构建。同一个节点内的查找使用二分法等方式查找。
  • ? ?组合索引和多列分别索引完全不同。前者是合并了索引值的索引,而后者需要在各列的索引树之间来回查询,前者的性能明显优于后者。(前者只有一棵索引树,后者有多棵)

?

3.explain工具

?

4.索引跟where语句的关系