索引:相当于一本书的目录,能够提高我们的查询效率
创建索引的情况:
--格式:
--默认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:不唯一, BITMAPTABLESPACE_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
如果强制走索引也不成功