Oracle-索引

Oracle-索引

    • 索引
    • 索引表ALL_INDEXES
    • SQL的执行计划
    • 强制走索引

索引

索引:相当于一本书的目录,能够提高我们的查询效率
创建索引的情况:

  1. 数据量非常大
  2. 该列经常会被作为查询条件
	--格式:
	--默认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小的查下面

D
E
F
G
C
B
A

索引表ALL_INDEXES

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:是否分区索引

作用:可以使用此表查询目标表有哪些索引,索引信息,索引是否失效,是否需要重构索引。

SQL的执行计划

Oracle-索引_第1张图片
查看方法:

  1. 从左往右看,缩进最多的最先执行
  2. 缩进相同的按照从上往下顺序执行
  3. Cost字段表示SQL每一步的执行成本,可以根据它来看最耗时的步骤进行优化。
  4. Description里面出现
    TABLE ACCESS FULL表示进行了全表扫描
    出现 TABLE ACCESS BY INDEX ROWID 表示走了索引,走哪个索引一般索引名称出现在Object name

强制走索引

select /*+index(表名,索引名称)*/ * from 表名 where name = '张三' order by rksj asc

如果强制走索引也不成功

你可能感兴趣的:(数据库,oracle,数据库,sql)