dev

DB - Index

/wrote/note/dev/db/index/

DB - Index

请参考大白话讲索引

什么是索引

Simply put, an index is a pointer to data in a table. An index in a database is very similar to an index in the back of a book.

索引是数据库中的一种数据结构,它可以加速查询。一种常见的实现是B树。

B Tree

平衡多路查找树

一颗m阶的B树具有以下特征:

  • 每个结点最多含有m个子树(m>=2);
  • 若根结点不是叶子结点,则至少有2个子树;
  • 除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个子树;
  • 所有叶子结点都出现在同一层;
  • 有j个子树的非叶子节点有j-1个关键字,按增序排列。

db-index-b-tree

B树的各种操作能使B树保持较低的高度,从而有效避免磁盘过于频繁的IO操作,从而提高查找效率。

http://blog.csdn.net/v_JULY_v/article/details/6530142/

索引的优缺点

优点

  • 可以大大加快数据的检索速度
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点

  • 需要占用额外物理空间
  • 创建和维护索引,以及对表中数据更新时,需要耗费额外时间

几种索引的类型

唯一索引

  • 唯一索引是不允许其中任何两行具有相同索引值的索引。
  • 当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

单一索引与组合索引

  • 单一索引:即只对于某一列(column)建立索引。
  • 组合索引:即对于多列(column)建立索引。

怎么使用索引

  • 在经常需要搜索的列上,可以加快搜索的速度;
    • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
    • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
    • 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
  • 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;