oracle学习笔记——索引

简介: oracle学习笔记——索引 类似于字典中查找数据:两种方式,1.通过逐页查找,效率低。2.通过检索目录,直接定位,效率高。 索引就是要查找数据的目录。当对数据建立索引后,oracle会开辟新的存储空间为索引,并且把所有值和rowid存储其中, 当查找的某个信息含有索引时,oracle便改为查找索引,找到其对应的rowid,然后根据rowid检索到对应的信息。

oracle学习笔记——索引

类似于字典中查找数据:两种方式,1.通过逐页查找,效率低。2.通过检索目录,直接定位,效率高。
索引就是要查找数据的目录。当对数据建立索引后,oracle会开辟新的存储空间为索引,并且把所有值和rowid存储其中,
当查找的某个信息含有索引时,oracle便改为查找索引,找到其对应的rowid,然后根据rowid检索到对应的信息。

索引说明:

  1. 索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率;
  2. 索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
  3. 索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响;
  4. 索引对用户是透明的,无论表上是否有索引,sql语句的用法不变;
  5. oracle创建主键时会自动在该列上创建索引。

 

为什么使用索引:

1.  若没有索引,搜索某个记录时(例如查找name='wish')需要搜索所有的记录,因为不能保证只有一个wish,必须全部搜索一遍;

2. 若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值哪找升序排列,然后构建索引条目(name和rowid),存储到索引段中,查询name为wish时即可直接查找对应地方;

3. 创建了索引并不一定就会使用,oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引。

 

创建员工表:



      
      
  1. -- Create table
  2. create table EMP
  3. (
  4. empno NUMBER( 4) not null,
  5. ename VARCHAR2( 10),
  6. job VARCHAR2( 9),
  7. mgr NUMBER( 4),
  8. hiredate DATE,
  9. sal NUMBER( 7, 2),
  10. comm NUMBER( 7, 2),
  11. deptno NUMBER( 2)
  12. );
  13. -- Create/Recreate primary, unique and foreign key constraints
  14. alter table EMP
  15. add constraint PK_EMP primary key (EMPNO);

 

插入多条数据(建议5w以上):

通过没有建立索引的列进行查询:

 

通过主键查询:

从上可以很明显的看出,根据主键EMPNO查询时间短的多些。

这是因为:

创建主键的时候自动给主键添加了索引,且该索引为唯一性索引。

即主键一定是唯一性索引。

但是一张表中可以有多个唯一性索引,所以唯一性索引不一定是主键。

1、普通索引

普通索引的唯一任务加快数据访问速度。因此,应该只为那些最经常出现在查询条件WHERE column = )或排序条件(ORDER BY column)中的数据创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

 

2、唯一索引

  普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。
  如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了SQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是SQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,SQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

 

索引使用(创建):

创建索引:



      
      
  1. CREATE [ UNIQUE] | [ BITMAP] INDEX index_name --unique表示唯一索引
  2. ON table_name([column1 [ ASC| DESC],column2 --bitmap,创建位图索引
  3. [ ASC| DESC],…] | [express])
  4. [ TABLESPACE tablespace_name]
  5. [PCTFREE n1] --指定索引在数据块中空闲空间
  6. [ STORAGE ( INITIAL n2)]
  7. [NOLOGGING] --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
  8. [NOLINE]
  9. [NOSORT]; --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

例如,

创建商品表:



      
      
  1. -- Create table
  2. create table TB_GOODS
  3. (
  4. goods_id VARCHAR2( 64) not null,
  5. goods_name VARCHAR2( 256) not null,
  6. goods_price VARCHAR2( 64) not null,
  7. status VARCHAR2( 1) not null
  8. );

创建索引:



      
      
  1. --这里unique可以省略,若省略则索引为非唯一索引
  2. create index UI_tb_goods  on tb_goods(goods_name);
  3. --若使用unique则为唯一索引
  4. create unique index un_tb_goods  on tb_goods(goods_name);
  5. --括号中添加两列则为组合索引
  6. create unique index un2_tb_goods  on tb_goods(goods_name, status);
  7. --括号中添加三列,其顺序没有关系,效果是一样的
  8. create unique index un3_tb_goods  on tb_goods(goods_name,goods_price, status);

唯一索引的另一个作用,控制列不能有相同值

 

查询索引:



      
      
  1. select * from user_indexes where table_name= '表名';
  2. select * from user_ind_columns   where index_name= '索引名';

原文地址 https://blog.csdn.net/guanxiaoyu002/article/details/81169854

相关文章
|
3月前
|
SQL Oracle 关系型数据库
[Oracle]索引
本文介绍了数据库索引的基本概念、优化查询的原理及分类。索引是一种数据结构(如B树或B+树),通过排序后的`rowid`来优化查询性能。文章详细解释了索引的构建过程、B+树的特点及其优势,并介绍了五种常见的索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。每种索引都有其适用场景和限制,帮助读者更好地理解和应用索引技术。
107 1
[Oracle]索引
|
8月前
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
|
9月前
|
存储 Oracle 关系型数据库
Oracle索引知识看这一篇就足够
Oracle索引知识看这一篇就足够
|
9月前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
9月前
|
Oracle 关系型数据库 数据处理
某教程学习笔记(一):10、oracle数据库注入
某教程学习笔记(一):10、oracle数据库注入
55 0
|
9月前
|
SQL Oracle 关系型数据库
Oracle-index索引解读
Oracle-index索引解读
230 0
|
存储 SQL Oracle
Oracle优化避免索引失效
Oracle优化避免索引失效
400 0
|
索引
Oracle-序列、索引和同义词
Oracle-序列、索引和同义词
66 0
|
存储 Oracle 关系型数据库
9-6 Oracle 管理索引
9-6 Oracle 管理索引
|
SQL Oracle 关系型数据库
Oracle-表分析和索引分析解读
Oracle-表分析和索引分析解读
227 0

推荐镜像

更多