索引:在执行数据查询的时候,加速查询效率,减少查询过程中消耗的服务器和数据库的资源。
索引类型:
逻辑上
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based函数索引
Domain 域索引
物理上
Partitioned 分区索引
NonPartitioned 非分区索引
B-tree:
Normal 正常型B树
Rever Key 反转型B树
Bitmap 位图索引
1.主键索引:跟随主键的创建和删除而创建和删除
2.唯一索引:唯一索引可以跟随唯一约束产生和删除,但是创建唯一索引时对应的列必须满足唯一约束,并且创建唯一索引时,再添加的数据也要满足唯一约束
创建:create unique index 索引名称 on 表名(列名);
alter table 表名 add constraint 唯一约束名 unique(列名);
删除:alter table 表名 drop constraint 索引名称;
drop index 索引名称
3.普通索引:列数据没有啥特点,但是要经常被查询到
创建:create index 索引名 on 表名(列名);
删除:drop index 索引名
4.组合索引:有多个列需要同时被查询到时,可以创建组合索引,组合索引遵循左边命中原则,要想命中索引,查询语句需要包含索引的第一个列
创建:create index 索引名称 on 表名(字段1,字段2...)
5.函数索引:需要经过函数运算才能查询的字段
创建:create index 索引名 on 表名(函数名(参数列))
6.位图索引:创建在有大量重复值的列上,比如性别之类的字段上,位图索引是一张字段名和取值的0,1二维向量表。
创建:create bitmap index 索引名称 on 表名(列名)
7.分区索引:创建在分区表上的索引,都是分区索引,创建后不加后缀的默认都是全局索引
7.1 本地索引:每个分区都有个索引来进行数据管理
创建:create index 索引名称 on 表名(列名) local;
本地索引不能创建唯一索引,因为每个索引只能保证每个分区的数据唯一性,不能保证整个表格的数据唯一性
7.2 全局索引:对整个表格所有分区数据进行管理。
创建:create index 索引名字 on 表名(列名) global
全局索引不能创建位图索引
8.索引失效的场景
1.查询数据时条件两边类型不一致,发生了隐式转换
2.条件筛选时使用了函数
3.条件筛选时左边出现了数学计算
4.空值查询 is null
5.取反查询 != not
6.组合索引时没有引用第一列
7.索引的列 经常被DML修改