oracle 索引

本贴最后更新于 2727 天前,其中的信息可能已经时移世改

聚集索引

聚集索引确定表中数据的物理顺序,一个表只能包含一个聚集索引,但该索引可以包含多个列(组合索引)。
应用范围:

  1. 对于那些经常要搜索范围值的列特别有效,避免每次查询该列时都进行排序,从而节 省成本。
  2. 如果索引值唯一,使用聚集索引查找特定行。例如,使用唯一的雇员 Id 这个列去查找雇员信息,在雇员 Id 上加聚集索引是最快速的方法(把 id 设置成主键也是一样的)。

由此可以看出聚集索引主要是用在返回某范围内的数据,比如有个时间列,你经常要查询某段时间内的数据,那么在时间列上建立聚集索引是很好的。其次要考虑的是时候会经常根据某个列屈查询那一行的数据,如根据姓名查询人员信息,那么在姓名列建立聚集所以是很好的。综上所述,无意义的主键设置为聚集索引时没有意义的,因为第一:我们不可能去查询某个范围内的 ID 的数据,第二:我们很少会用无意义的主键去查询某条数据。

聚集索引和非聚集索引的区别

  1. 假设我们的数据库是一本词典,那么按照拼音字母的目录就是聚集索引,比如我要找个“安”字,那么你肯定会去前几页找,如果找完了 a 还是没有“安”,那么这本字典就没有这个字了。
  2. 而有时候,我们不认识这个字怎么发音,那么我们需要按照偏旁去查找这个字,这就是非聚集索引,我们查宝盖头,查出来“宝”“安”等字并不是在物理地址上紧挨着的,我们找到这个字需要 2 个过程:先找到目录中的结果,然后再翻到您所需要的页码。

聚集索引和非聚集索引的应用场景

索引的优点与缺点及其使用场景

优点:

  1. 加快查询速度,这是创建索引的主要原因。
  2. 显著减少查询中分组和排序的时间。

缺点:

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  2. 需要占物理空间。
  3. 进行表数据增删改的时候,索引也要动态的维护。

索引的使用场景:

  1. 在经常需要搜索的列上,可以加快搜索的速度
  2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
  3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
  4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,
    其指定的范围是连续的
  5. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以
    利用索引的排序,加快排序查询时间

索引不使用的场景:

  1. 查询中很少使用或者参考的列不应该创建索引
  2. 很多相同值的列,如性别列,基本上都是相同的,排序了和没排序相差不大
  3. 增删改多于查询的情况,维护成本高
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    343 引用 • 723 回帖
  • 索引
    24 引用 • 28 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...