索引:相当于一本书的目录,能够提高我们的查询效率
创建索引的情况:
--格式:
--默认oracle建立的正序索引
create index 索引名称 on 表名(列1,列2,列3...)
--oracle倒序索引
create index 索引名称 on 表名(列1,列2,列3... desc)
--demo
create index ss on T_TRUE_TJRESULT(day);
--重构索引(注意:在并发情况下重建索引可能会导致锁表)
alter index 索引名称 rebuild;
注意: 主键约束自带主键索引,唯一约束自带唯一索引
索引的原理:平衡二叉树,如果某列作为查询条件时,可以提高查询效率,但是修改的时候会变慢,因为插入的时候需要去修改树的结构,同时索引创建好后,过了一段时间,数据库的插入删除次数增多,会改变树的结构,所以每隔一段时间DBA
数据库管理员会去重构索引。
如下图平衡二叉树所示:以D
为树根,比D
大的查上面,比D
小的查下面
select OWNER, INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME, UNIQUENESS, TABLESPACE_NAME, STATUS, PARTITIONED from all_indexes
OWNER
:所有者用户名INDEX_NAME
:索引名INDEX_TYPE
:索引类型TABLE_OWNER
:索引对应的表的所有者用户名TABLE_NAME
:索引对应的表名UNIQUENESS
:索引的唯一性状态: UNIQUE
:唯一, NONUNIQUE
:不唯一, BITMAP
TABLESPACE_NAME
:索引所在的表空间名称STATUS
:索引状态(VALID
:有效索引,N/A
:有效分区索引,UNUSABLE
:无效索引)PARTITIONED
:是否分区索引作用:可以使用此表查询目标表有哪些索引,索引信息,索引是否失效,是否需要重构索引。
Cost
字段表示SQL每一步的执行成本,可以根据它来看最耗时的步骤进行优化。Description
里面出现TABLE ACCESS FULL
表示进行了全表扫描TABLE ACCESS BY INDEX ROWID
表示走了索引,走哪个索引一般索引名称出现在Object name
。select /*+index(表名,索引名称)*/ * from 表名 where name = '张三' order by rksj asc
如果强制走索引也不成功