• 索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
  • 索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于
    下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提
    到的伪列(ROWID)

0. 普通索引

  1. create index 索引名称 on 表名(列名);

1. 唯一索引

如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这时我们可 以创建唯一索引。

  1. create unique index 索引名称 on 表名(列名);

2. 复合索引

我们经常要对某几列进行查询,比如,我们经常要根据学历和性别对学员进行搜索,如果我们对这两列建立两个索引,因为要查两棵树,查询性能不一定高。那如何建立索引呢?我们可以建立复合索引,也就是基于两个以上的列建立一个索引 。

  1. create index 索引名称 on 表名(列名,列名.....);

3. 反向键索引

应用场景:当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布。

  1. create index 索引名称 on 表名(列名) reverse;

4. 位图索引

使用场景:位图索引适合创建在低基数列上 位图索引不直接存储 ROWID,而是存储字节位到 ROWID 的映射 优点:减少响应时间,节省空间占用

  1. create bitmap index 索引名称 on 表名(列名);

索引啥时候创建,啥时候不创建

  • 主键自动建立唯一索引
  • 频繁作为查询条件的字段创建索引
  • 频繁更新的字段不创建
  • where条件里用不到的字段不创建
  • 高并发的情况下一般选择符合索引
  • 表记录太少,不需要创建
  • 经常增删改的表不适合建立索引