• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

子把瓢总

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

索引

1.索引概念

概念:类似于书目录,用于按条件查询的时候提高查询效率。

过程:先查询索引,再通过索引找到相关的数据。

保存:索引自身也是通过文件来保存的。

2.索引的类型(保存方式)

1)顺序索引:根据值的顺序排序(建立的索引字段值顺序的放在索引文件里面)。

2)散列索引:将值平均分配到若干散列桶中,通过散列函数定位。

2.1 顺序索引

分类:

聚集索引:被索引字段本身按照一定的顺序排序。=》非聚集索引:反面。

稠密索引:被索引字段的每个值都有一个索引与其对应。否则叫做稀疏索引。

单级索引:把所有的索引字段以及对应的文件位置按顺序一个个的排列出来。

顺序存储,查找慢,可用二分法查找。

多级索引:指向索引的索引。B+树。

B+树的目的和红黑树都是为了尽量保持树的平衡,但红黑树是二叉树,B+树节点下面可以有多个子节点。

数据库开发商会设置子节点数的一个最大值,这个值不会太小,所以B+树一般来说比较矮胖,红黑树比较瘦高。

B+树的插入,删除,会涉及到一些算法以保持树的平衡。ORACLE的默认索引就是这种结构。

如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引。

2.2 散列索引

通过散列函数定位。散列文件组织用的比较多。

散列文件组织根据一个键,通过散列计算把对应的记录都放到同一个槽中,这样拥有相同键值的记录一定放在同一个文件里。减少了文件读取的次数,提高了效率。

2.3 位图索引

位图索引是一种针对多个字段的简单查询设计一种特殊的索引,适用范围比较小,只适用于字段值固定并且值的种类很少的情况,比如性别,只能有男和女,或者级别,状态等等,并且只有在同时对多个这样的字段查询时才能体现出位图的优势。

位图的基本思想就是对每一个条件都用0或者1来表示,如有5条记录,性别分别是男,女,男,男,女,那么如果使用位图索引就会建立两个位图,对应男的10110和对应女的01001,这样做有什么好处呢,就是如果同时对多个这种类型的字段进行and或or查询时,可以使用按位与和按位或来直接得到结果了。

总结:

B+树最常用,性能也不差,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。

HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。

位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。

 

 

什么是聚集索引和非聚集索引?

数据记录本身被存于索引(一颗B+Tree)的叶子节点上,这种索引叫聚集索引,InnoDB使用聚集索引。反之则为非聚集索引,MyISAM使用非聚集索引,它的叶子节点的data域指向数据记录的地址,而不是存储数据记录本身;

100篇文章,你将所有文章都提取出来一定量的tags标签,这就是正向索引。
你选择其中一个tags标签,然后所有包含这个标签的文章都出来,这就是倒序索引。
正向索引就是,每一个页面都包含哪些关键词。
倒序索引就是,某一个关键词,都有哪些页面包含。

posted on 2015-07-28 10:09  子把瓢总  阅读(150)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3