精华内容
下载资源
问答
  • 实验六 视图索引 实验目的 (1)了解视图的重要性 (2)掌握视图的建立 (3)掌握视图的使用 (4)掌握索引的使用方法 (5)掌握索引的概念及分类
  • Oracle 视图索引

    2020-05-30 21:45:21
    文章目录一、视图二、索引 一、视图 视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表 语法 : CREATE VIEW 视图名称 AS 子查询 ---查询语句创建表 create table emp as select * from scott.emp; ...

    一、视图

    视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表
    语法 : CREATE VIEW 视图名称 AS 子查询

    ---查询语句创建表
    create table emp as select * from scott.emp;
    select * from emp;
    ---创建视图【必须有dba权限】
    create view v_emp as select ename, job from emp;
    ---查询视图
    select * from v_emp;
    ---修改视图[不推荐],实际的数据也会改变
    update v_emp set job='CLERK' where ename='ALLEN';
    commit;
    ---创建只读视图
    create view v_emp1 as select ename, job from emp with read only;
    

    视图的作用?
    第一:视图可以屏蔽掉一些敏感字段。
    第二:保证总部和分部数据及时统一。(总部操纵实际的表,分部查询视图这样保证数据的统一)

    • 语法 1: CREATE VIEW 视图名称 AS 子查询
    • 范例:建立一个视图,此视图包括了 20 部门的全部员工信息
      在这里插入图片描述
    • 语法 : CREATE OR REPLACE VIEW 视图名称 AS 子查询
      在这里插入图片描述
    • 一般不会去修改视图,我们可以设置视图为只读
    • 语法 3:CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY
      在这里插入图片描述

    二、索引

    索引是用于加速数据存取的数据对象。 合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
    索引就是在表的列上构建一个二叉树,达到大幅度提高查询效率的目的,但是索引会影响增删改的效率。

    • 为什么添加了索引之后,会加快查询速度呢?
      图书馆:如果杂乱地放书的话检索起来就非常困难,所以将书分类,然后再建一个箱子,箱子里面放卡片,卡片里面可以按类查询,按书名查或者类别查,这样的话速度会快很多很多,这个就有点像索引。索引的好处就是提高你找到书的速度,但是正是因为你建了索引,就应该有人专门来维护索引,维护索引是要有时间精力的开销的,也就是说索引是不能乱建的。
      所以建索引有个原则:如果有一个字段如果不经常查询,就不要去建索引。现在把书变成我们的表,把卡片变成我们的索引,就知道为什么索引会快,为什么会有开销。

    • 单列索引:单列索引是基于单个列所建立的索引
      语法:CREATE index 索引名 on 表名(列名)

    • 复合索引:是基于两个列或多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同
      在这里插入图片描述

    • 索引的使用原则:
      在大表上建立索引才有意义;在 where 子句后面或者是连接条件上的字段建立索引;表中数据修改频率高时不建议建立索引;

    范例:给 person 表的 name 建立索引
    create index pname_index on person(name);
    范例:给 person 表创建一个 name 和 gender 的索引
    create index pname_gender_index on person(name, gender);
    
    ---单列索引
    ---创建单列索引
    create index idx_ename on emp(ename);
    ---单列索引触发规则,条件必须是索引列中的原始值。
    ---单行函数,模糊查询,都会影响索引的触发。
    select * from emp where ename='SCOTT'
    ---复合索引
    ---创建复合索引
    create index idx_enamejob on emp(ename, job);
    ---复合索引中第一列为优先检索列
    ---如果要触发复合索引,必须包含有优先检索列中的原始值。
    select * from emp where ename='SCOTT' and job='xx';---触发复合索引
    select * from emp where ename='SCOTT' or job='xx';---不触发索引
    select * from emp where ename='SCOTT';---触发单列索引。
    
    展开全文
  • NULL 博文链接:https://xurichusheng.iteye.com/blog/1340473
  • 视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图所对应的数据并不真正地存储在视图中,       而是存储在所引用的数据表中,视图的结构和数据是对数据表进行...

    一. 视图

    1.1 什么是视图

          视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图所对应的数据并不真正地存储在视图中,
          而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。
          根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,
          它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。

    使用视图的优点:

    • 1.简化数据操作: 视图可以简化用户处理数据的方式。
    • 2.着重于特定数据: 不必要的数据或敏感数据可以不出现在视图中。
    • 3.视图的安全机制: 可以定制不同用户对数据的访问权限。
    • 4.提供向后兼容性: 视图使用户能够在表的架构更改时为表创建向后兼容接口。

      视图可以包含视图

    1.2 创建或修改视图语法

    	CREATE [OR REPLACE] [FORCE] VIEW 表名   
    		AS subquery   
    		[WITH CHECK OPTION ]   
    		[WITH READ ONLY] 
    	
    	选项解释: 		 
    		OR REPLACE 			:若所创建的试图已经存在,ORACLE 自动重建该视图; 
    		FORCE      			:不管基表是否存在 ORACLE都会自动创建该视图; 
    		subquery    	 	:一条完整的 SELECT 语句,可以在该语句中定义别名; 
    		WITH  CHECK  OPTION :插入或修改的数据行必须满足视图定义的约束;
    								不能修改视图生成时,where条件中的列
    		WITH READ ONLY 		:该视图上不能进行任何 DML 操作。 
    	
    3.删除视图语法 
    	DROP  VIEW 表名  
    	
    4.案例
    	a)简单视图的创建与使用 
    		1.什么是简单视图?如果视图中的语句只是单表查询,并且没有聚合函数,我们就称之为简单视图。 
    		2.对于简单视图,可以查询,增删改记录。(把视图看做一张表进行操作)
    		3.视图是一个虚拟的表,数据来自于表。
    			(1)如果更改了视图的数据,表的数据也自然会变化,
    			(2)更改了表的数据,视图也自然会变化。
    			(3)一个视图所存储的并不是数据,而是一条 SQL语句。 	
    		
    	b) 带检查约束的视图 
    		create or replace view view_address2 as 
    		select * from T_ADDRESS 
    		where areaid=2 
    		with check option 
    		
    		*不能修改视图生成时,where条件中的列
    		
    	c)只读视图:只能读取
    	
    	d)创建带错误的视图 
    			如果视图的 SQL 语句所设计的表并不存在,会创建失败
    			
    			有的时候,我们创建视图时的表可能并不存在,但是以后可能会存在,我们如果
    		此时需要创建这样的视图,需要添加 FORCE 选项,SQL语句如下: 
    		create or replace FORCE view view_TEMP as select * from T_TEMP 
    	
    	f)复杂视图的创建与使用 
    		视图的SQL语句中,有聚合函数或多表关联查询。 
    		(1)多表关联查询的例子 
    			键保留表的字段是可以更新的,而非键保留表是不能更新的
    			什么叫键保留表呢? 
    				键保留表是理解连接视图修改限制的一个基本概念。
    					该表的主键列全部显示在视图中,并且它们的值在视图中都是唯一且非空的。
    				也就是说,表的键值在一个视图中也是键值,那么就称这个表为键保留表。 
    		
    			***持有外键的那张表是键保留表
    			
    		(2)分组聚合统计 
    			聚合统计视图是没有键保留表的,并且只能读取
    

    二. 物化视图

    2.1 什么是物化视图

        视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集。每次访问它都会导致
        这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图)。
        物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间。
        而对一个物化视图查询的执行效率与查询一个表是一样的。

    2.2 创建物化视图语法

    	CREATE  MATERIALIZED VIEW view_name
    		[BUILD IMMEDIATE  | BUILD DEFERRED ]
    		REFRESH [FAST|COMPLETE|FORCE]  
    		[  ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT (next_time)  ]  
    		AS subquery  
    	a)BUILD 
    		BUILD IMMEDIATE 是在创建物化视图的时候就生成数据  
    		BUILD DEFERRED  则在创建时不生成数据,以后根据需要再生成数据。 
    		默认为 BUILD IMMEDIATE。 
    	
    	b)REFRESH:										//怎么刷新
    		指当基表发生了 DML操作后,物化视图何时采用哪种方式和基表进行同步。 
    		 REFRESH 后跟着指定的刷新方法有三种:FAST、COMPLETE、FORCE。
    		 
    		 FAST		:刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
    		 COMPLETE 	:刷新对整个物化视图进行完全的刷新。
    		 FORCE		:则 Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用 FAST 方式,否则采用 COMPLETE
    					的方式。
    					FORCE 是默认的方式。
    					执行fast需要建立日志
    	c)刷新的模式有两种:ON DEMAND 和 ON COMMIT//在什么时候刷新
    		ON DEMAND 指需要手动刷新物化视图(默认)。
    		ON COMMIT 指在基表发生 COMMIT 操作时自动刷新。 
    		
    	d)创建手动刷新的物化视图 
    		需求:查询地址 ID,地址名称和所属区域名称
    		create materialized view mv_address   as 
    			select ad.id,ad.name adname,ar.name ar_name  
    			from t_address ad,t_area ar 
    			where ad.areaid=ar.id 
    			
    		1.手动刷新物化视图: 
    			begin 
    				DBMS_MVIEW.refresh('MV_ADDRESS','C');
    			end; 
    		2.在命令SQL窗口刷新
    			EXEC DBMS_MVIEW.refresh('表名','C');   //'C':是COMPLETE的缩写
    		
    	e).创建时不生成数据的物化视图 
    		create materialized view mv_address3 
    			build deferred  
    			refresh on commit 
    			as select ad.id,ad.name adname,ar.name ar_name  
    			from t_address ad,t_area ar  where ad.areaid=ar.id; 
    		
    		**创建时不生成数据时候,第一查询要手动刷新
    
    	f)创建增量刷新的物化视图 
    			创建增量刷新的物化视图,必须要有物化视图日志:记录基表发生了那些变化,(提交之后会清空日志)用这些记录去更新物化视图
    		创建物化视图中的语句中,with后面关联的列,基表中必须有
    		
    		**如果创建增量刷新的物化视图,必须首先创建物化视图日志 
    			eg: create materialized view log on t_address with rowid;
    				create materialized view log on t_area with rowid 
    		 
    		创建的物化视图日志名称为 MLOG$_表名称 
    		
    		注意:创建增量刷新的物化视图,必须: 
    			1. 创建物化视图中涉及表的物化视图日志。 
    			2. 在查询语句中,必须包含所有表的 rowid ( 以 rowid方式建立物化视图日志 ) 
    		
    
    	g)删除物化视图
    		drop materialized view 表名
    

    三. 序列

    1.什么事序列
    	序列是 ORACLE 提供的用于产生一系列唯一数字的数据库对象。 
    	
    2.创建与使用序列  //序列也是个伪列
    	create sequence 序列名
    	
    	通过序列的伪列来访问序列的值 
    		NEXTVAL 返回序列的下一个值 
    		CURRVAL 返回序列的当前值 
    
    	提取下一个值  
    		select 序列名称.nextval from dual 
    	提取当前值 
    		select 序列名称.currval from dual 
    	
    	注意:我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。 
    	
    3.创建复杂序列 
    	语法: 
    	CREATE SEQUENCE sequence  //创建序列名称 
    		   [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是 1 
    		   [START WITH n]    //开始的值,递增默认是 minvalue 递减是 maxvalue 
    		   [{MAXVALUE n | NOMAXVALUE}] //最大值 
    		   [{MINVALUE n | NOMINVALUE}] //最小值 
    		   [{CYCLE | NOCYCLE}] //循环/不循环 
    		   [{CACHE n | NOCACHE}];//分配并存入到内存中 	
    				默认为20,默认cache,一次从磁盘中拿出20,存储到内存中,用完后们再次从硬盘中拿取数据
    4.案例
    	a)循环的序列,第一次循环是从开始值开始循环,而第二次循环是从最小值开始循环。 
    	b)循环的序列必须指定最大值
    	c)带缓存的序列 
    		我们执行下列语句: 
    		create sequence seq_test3 
    			increment by 10 
    			start with 10 
    			maxvalue 501 
    			minvalue 5 
    			cycle  
    			cache 50; 
    	
    		***缓存设置的数必须小于每次循环的数
    	
    	视图和物化视图的区别?  
    		视图是一张虚拟的表:视图可以封装一些数据,把数据隐藏起来,只给使用者看到一部分信息,(信息安全),简化sql语句
    		物化视图:创建一个具体的表,提高查询速度
    		
    	为什么要用序列?  :oracle中没有自动增长,我们插入表的时候要从序列中取值.
    	同义词有多什么作用 :操作同义词和操作它本身是一致的.
    		private的具有dba权限的用户可以通过表名.同义词查询,所有用户公共的都可以访问
    		
    5.修改和删除序列 
    	修改序列:使用 ALTER SEQUENCE 语句修改序列,不能更改序列的 START WITH 参数 
    		ALTER SEQUENCE 序列名称 MAXVALUE 5000 CYCLE; 
    	删除序列: 
    		DROP SEQUENCE 序列名称; 		
    

    四. 同义词

    4.1 什么是同义词

        同义词实质上是指定方案对象的一个别名。同义词可以提供一定程度的安全性。同时,同义词的易用性较好,降低了数据库用户的 SQL语句复杂度。

    4.2 创建与使用同义词

    create [public] SYNONYM synooym for object; 
    
    其中 synonym表示要创建的同义词的名称,
    object表示表,视图,序列等我们要创建同义词的对象的名称
    
    1.私有同义词  
    	create synonym OWNERS for T_OWNERS; 
    2.2.公有同义词 
    	create public synonym OWNERS2 for T_OWNERS; 
    

    五. 索引 (查询快)

    5.1 什么是索引

        索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。

        索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于下图的一棵“树”,而树的节点存储的就是每条记录的物理地址,也就是我们提到的伪列(ROWID)

    5.2 普通索引

    create index 索引名称 on 表名(列名); 
    

    5.3 唯一索引

        如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可以创建唯一索引。

    create unique index 索引名称 on 表名(列名); 
    

    5.4 复合索引

    应用场景: 经常要对某几列进行查询进行查询时使用

    create index 索引名称 on 表名(列名,列名.....); 
    

    5.5 反向键索引

    应用场景: 当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树。这样会增加查询的层数,性能会下降。建立反向键索引,可以使索引的值变得不规则,从而使索引树能够均匀分布。

    	create index 索引名称 on 表名(列名) reverse;
    

    5.6 位图索引

    使用场景: 位图索引适合创建在低基数列上 ,也就是列中的内容确定且不多的情况下
    优点: 减少响应时间,节省空间占用

    	create bitmap index 索引名称 on 表名(列名); 
    
    展开全文
  • oracle 创建索引视图

    千次阅读 2018-07-15 14:37:27
    1. 自动添加oracle 会为主键和唯一约束自动添加索引)  自动创建的索引是无法手动删除的,但是当删除主键约束,唯一约束时,对应的索引也会自动删除;   2. 手动添加  在查询时,经常被用作查询条件的字段...

     

    一:    创建索引有两种方式:

     

    1.    自动添加(oracle 会为主键和唯一约束自动添加索引)

           自动创建的索引是无法手动删除的,但是当删除主键约束,唯一约束时,对应的索引也会自动删除;

     

    2.    手动添加

           在查询时,经常被用作查询条件的字段应该被添加索引;

           添加索引:    CREATE  INDEX  ENAME_INDEX  ON  EMP  (ENAME);

           删除索引:    DROP  INDEX   ENAME_INDEX;

     

    二:  添加约束:

                     ALTER  TABLE  EMP  ADD  CONSTRANTS  ENAME_UNI  UNIQUE  (ENAME);

             删除约束:

                     ALTER  TABLE  EMP  DROP  CONSTRANTS  ENAME_UNI;

     

    观察查询处理结果需要启动追踪器进行浏览:

        切换sys账户: conn sys/change_on_install as sysdba;

        打开追踪器:set autotrace on;   

    默认情况下数据执行时采用全表扫描(逐行扫描),如果这样的查询采用全表扫描,如果数据量大的话执行速度一定是很慢的。如果有10000条数据,前5000条数据执行红包含满足条件的内容,后面的逐行扫描查询就是浪费时间

        解决问题:唯一可行的办法就是排序,那么对于在数据库里对于不查询的数据的排序,那么就是将其形成一棵树,这棵树的排列形式如下:取第一个数据作为根节点,而后比根节点小的数据放在左边,比根节点打的数据放在右边

    数据库之中对于索引的创建有两种形式:

        1.当数据列上使用了主键约束或唯一约束的时候自动创建索引;

         2.自己手工明确设置一个查询字段,手工创建索引;

         例: create index scott.emp_sal_ind on scott.emp(sal);

    注:索引并不能100%提高查询性能,索引实现的关键在于整个数据库之中索引树的维护,如果没有了这棵树,索引将无法使用,但是这颗树采用的是制定的索引字段才转换的树,但是如果字段上的内容频繁修改,那么久表示将有大量的内存和性能浪费在了这棵树的维护上,反而造成性能上的下降,所以建立索引的字段也要根据实际的情况有所调整

     

    三: 创建视图

            在实际之中数据表的查询都是比较复杂的,在一些传统的技术开发里面,视图的数量往往查过数据表的数量,但随着现在的一些开发(很难找到所谓的专业的数据库开发人员了),这样一来所有编写复杂查询的任务又回到程序员身上了,所以很多程序员为了代码的修改方便,都不再使用视图了。

            1.视图是存储在数据字典的一条select语句。通过创建视图可以提取数据的逻辑上的的集合和组合。
            视图分为:简单视图和复杂视图
                简单视图:只从单表中获取数据、不包含函数和数据组、可实现DML操作
                复杂视图:从多表中获取数据、包含函数和数据组、不能实现DML操作
                视图创建语句
                CREATE[OR REPLACE][FORCE|NOFORCE] VIEW view_name
               [(alias[,alias]...)]
                 AS subquery
               [WITH CHECK OPRION[CONSTRAINT constraint]] 
               [WITH READ ONLY]
               其中:
               OR REPLACE :若所创建的视图存在,ORACLE自动重建该视图;
               FORCE :不关基表是否存在ORACLE都会自动创建该视图;
               NOFORCE :只有基表都存在ORACLE才会创建该视图;
               alais :为视图产生的列定义的别名;
               subquery :一条完整的SELECT语句,可以在该语句中定义别名;
               WITH CHECK OPTION :插入或者修改的数据行必须满足视图的定义的约束;
               WITH READ ONY :该视图上不能进行任何DML操作;(只读)
               例如:
               CREATE OR REPLACE VIEW dept_sum_vm
               (name,minsal,maxsal,avgsal)
               AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
               FROM emp e,dept d
               WHERE e.deptno=d.deptno
               GROUP BY d.dname;
             视图定义原则:
                1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
                2.在没有WITH CHECK OPTION和READ ONLY的情况下,查询中不能使用ORDER BY子句
                3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
                4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授权对象权限。

            2. 在scott用户下创建视图权限不足:

              使用sys登陆:CONN SYS/change_on_install AS SYSDBA;

              授权:GRANT CREATE VIEW TO SCOTT;

              切换回SCOTT: conn scott/tiger;

            3.  视图是一个查询的结果,并不表示真实的数据,所以理论上视图是不应该被修改的,但是默认情况下如果不进行任何的配置,视图的数据是可以被修改的(简单情况)

             方法一:创建视图时添加with check option,创建视图时作为查询条件的字段,如果作为修改时的条件,修改就会报错,但是其他字段仍能被修改

             方法二:with read only:将其配置为只读视图,对于视图的创建强烈建议都设为只读模式

                      
            4.视图修改:
            直接创建同名视图即可
            视图的删除:DROP VIEW VIEW_NAME
            删除视图的定义不影响基表中的数据。
            只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
            视图被删除后,基于被删除视图的其他视图或应用将无效

     

     

     

           

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • oracle视图索引

    2021-01-21 14:36:10
    什么是视图【View】?  (1)视图是一种虚表  (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表  (3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句  ...
  • Oracle视图索引、序列

    千次阅读 2018-04-04 11:35:11
    一、视图概念:视图是一个虚拟表,它由存储的查询构成,可以将它的输出看作是一张表。视图同真表一样,也可以包含一系列带有名称的列和行数据。但是,视图并不在数据库中存储数据值,其数据值来自定义视图的查询语句...

    一、视图

    概念:视图是一个虚拟表,它由存储的查询构成,可以将它的输出看作是一张表。视图同真表一样,也可以包含一系列带有名称的列和行数据。但是,视图并不在数据库中存储数据值,其数据值来自定义视图的查询语句所引用的表,数据库只在字典中存储视图的定义信息。

          通过视图修改数据时,实际上就是在修改基本表中的数据。与之相对应,改变基本表中的数据也会反映到由该表组成的视图中。


    创建视图

          使用CREATE VIEW语句创建视图

          语法:

                 create [or replace] view <view_name>

                 [alias[,alias]...]

                 as <subquery>

                 [with check option] [constraint constraint_name]

                 [with read only]

          eg:创建emp表的视图,视图中只包含empno、ename、job这三列

          create view emp_view as select empno,ename,job from emp;

          创建结果:

          

    查询视图

    用户可以通过select语句像查询普通的数据表一样查询视图的信息。

    eg:select * from  emp_view;

    查询结果:


    更新视图

    可更新视图满足以下条件:

    1、没有使用连接函数、聚合函数和组函数

    2、创建视图的SELECT语句中没有聚合函数且没有GROUP BY、ONNECT BY、START WITH子句以及DISTINCT关键字

    3、创建视图的SELECT语句中不包括从基表列通过计算所得的列

    4、创建视图没有包含只读属性

    使用update语句可以通过视图修改基本表中的数据

    eg:将emp_view_complex视图中员工编号是7566的员工的工资改为3000

    update emp_view_complex set sal=3000 where empno=7566;

    修改视图的定义

    使用SQL命令修改视图

    eg:创建一个查询员工姓名为"SCOTT"的员工的工作和部门名称

    create or replace view emp_view as
     select ename,job,dname from emp inner join dept
       on emp.deptno=dept.deptno and emp.ename='SCOTT';

    修改及查询结果:


    删除视图

    当视图不在需要时,用户可以执行DROP VIEW语句删除视图。用户可以直接删除其自身模式中的视图,但如果要删除其他用户模式中的视图,要求该用户必须具有DROP ANY VIEW 系统权限。

    eg:删除视图emp_view

    drop view emp_view; 

    删除结果:



    二、索引

          如果要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后只需要在索引中找到符合查询条件的索引字段的值,就可以通过保存在索引中的rowid快速找到表中对应的记录。

    建立索引的注意事项:

    1、索引应该建立在WHERE子句频繁引用表列上

    2、限制表中的索引个数,索引主要用于加快查询速度,但会降低DML操作的速度;索引越多,DML操作速度越慢,尤其会极大地影响INSERT和DELETE操作的速度。因此,规划索引时,必须仔细权衡查询和DML的需求

    3、指定索引块空间的使用参数

    4、将表和索引部署到相同的表空间,可以简化表空间的管理将表和索引部署到不同的表空间,可以提高访问性能

    5、为了提高多表连接的性能,应该在连接列上建立索引。

    创建索引

    使用SQL命令创建索引

    1、创建B(Balance)树索引(Oracle默认索引)


    语法:

    CREATE INDEX 索引名 ON 表名 (列名[ASC | DESC],...);

    eg:为emp表的sal列创建索引

    create index emp_sal_index on emp(sal);

    创建结果:


    2、创建位图(bitmap)索引


    语法:

    CREATE BITMAP INDEX 索引名 ON 表名 (列名[ASC | DESC],...);

    eg:在deptno字段上设置位图索引

    create bitmap index emp_deptno_index on emp(deptno);

    创建结果:


    维护索引

    使用SQL命令维护索引

    eg:重命名索引emp_deptno_index

    alter index emp_deptno_index rename to deptno_index;

    更改结果:



    三、序列

    创建序列

    使用CREATE SEQUENCE语句创建序列的语法:

    create sequence <seq_name>
    [start with n]
    [increment by n]
    [minvalue n | nominvalue]
    [maxvalue n | nomaxvalue]
    [cache n | nocycle]
    [cycle | nocycle]
    [order | noorder]

    说明:

    start with n     从第几行开始

    increment by n     每次增加的数量

    minvalue/maxvalue      最小/大值

    cache n             缓冲区大小

    cycle                 生存周期

    eg:创建序列

    create sequence myseq;

    创建结果:


    序列有两个“伪列”:

    nextval序列将要产生的下一个数字

    currval序列当前的值

    注意:Oracle中是没有自增属性,跟MySQL是有一定区别的,MySQL中可以根据auto_increment关键字来实现某一列的自增,但Oracle不行

    eg:创建学生表,是学生的id自增

    创建学生表

    create table student(
           stuid int primary key,
           stuname varchar2(20),
           score number
    );

    创建序列:

    create sequence s_seq
    start with 100
    increment by 20
    maxvalue 200;

    创建结果:


    插入记录:直到小于等于200

    insert into student values(s_seq.nextval,'张三',78.5);

    查询一下:


    张三的id不是从1开始,而是从100开始,原因是,在常见序列时给定了初始值100,所以在插入第一条数据时id为100

    insert into student values(s_seq.nextval,'李四',88.5);

    我们可以插入多条数据进行测试,测试一下最大值的用处


    插入多条数据后stuid达到200,在次进行插入数据


    当值大于200的时候再次进行插入数据的操作后就会报错

    管理序列

    使用ALTER SEQUENCE语句可以对序列进行修改。需要注意,除了序列的起始值START WITH不能修改之外,其它可以设置序列的任何子句和参数都可以被修改。如果要修改序列的起始值,则必须先删除序列,然后重建序列

    展开全文
  • <p>create的时候设置的吗?不设置索引查询太慢了</p>
  • Oracle 视图索引

    千次阅读 2018-02-06 20:55:07
    第五章 视图索引的操作5.1 视图的功能一个视图实际上就是封装了一条复杂的查询语句注:为了在当前用户模式中创建视图,要求数据库用户必须有create any view(创建任何视图)的权限。5.2 创建视图的语法create [or ...
  • 2.掌握索引的创建、删除。 二、实验内容 1.写出创建满足下述要求的视图。 (1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。 (2)查询学生的学号、姓名、选修的课程名和考试成绩。 (3)统计每个...
  • 数据库基础与实践实验报告 实验四 视图索引 班级惠普测试 142 学号 1408090213 姓名闫伟明 日期 2016-11-13 精选文档 实验目的 掌握 SQL 进行视图创建的方法 掌握 SQL 进行视图更新的方法理解视图更新受限的原因 ...
  • Oracle创建索引视图SQL语句

    千次阅读 2020-05-19 12:23:36
    1、添加索引 create index 索引对象名 on 索引对应表名(表内索引对象字段名); 例:需创建包含userid属性的userinfo表。 create index userid on system.userinfo(userid); 2、删除索引 drop index 索引对象名; 例: ...
  • Oracle中的视图索引操作(讲义)

    千次阅读 2018-11-02 00:05:32
    ---oracle学习 --oracle的管理系统学习 --oracle的数据管理学习 ... --oracle的序列,视图索引 --oracle的分页查询 --oracle的数据库备份 --oracle的图形化界面操作 -----------------------...
  • Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要介绍这部分内容,接下来让我们一起来了解一下。  不走索引大体有以下几个原因: ...
  • 添加查询视图 视图可以简化查询,保护一些隐私数据,但增加了维护成本
  • Oracle查询视图是否会走原表索引

    千次阅读 2020-05-30 21:11:39
    在看Oracle视图与表时,突然想到个问题,即查询视图是否会走原表索引,然后自己就去实验了下,先说结论: Oracle查询视图的执行计划,与直接查询表相同,执行计划一致,即:查询视图的时候,如果查询语句在原表会走...
  • 在使用Oracle数据库过程中,视图是作为数据库对象存在的,因而,在...此类视图在某些特定条件下,优化器无法将视图外的谓词条件推送至视图内的基表上,即使在基表的列上创建索引也无法使用索引。本文将对该类视图提出一
  • oracle中视图、索引的认识

    千次阅读 2018-11-14 23:00:19
    oracle中视图、索引的认识 (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84033710 consistencely的博客) 1.视图 视图的概念:视图就是提供一个查询的窗口,所有数据来自...
  • oracle 物化视图及创建索引

    千次阅读 2015-05-26 10:41:00
    普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。 1、物化视图的类型:ON DEMAND、ON COMMIT  二者的区别在于刷新...
  • 如何让视图强制索引 Oracle

    千次阅读 2018-08-28 14:41:17
    Hint:/*+INDEX(FT.TX IX_01)*/  ...IX_01:在表TX上创建的索引 SELECT /*+INDEX(FT.TX IX_01)*/ FROM VIEW_01 FT , emp TX where FT.no=TX.no and FT.id=TX.id;   注意: using Join ON 连接表的时候 ...
  • oracle的查询、视图索引

    千次阅读 2019-04-06 20:55:20
    所有表来自oracle的scott用户的默认表 一、查询 1.1分组查询 查询平均工资大于2000的部门 t.deptno 部门 t.sal 工资 select t.deptno ,avg(t.sal) from emp t group by t.deptno having avg(t.sal)>2000; 1.2多...
  • Oracle --视图索引

    2018-04-20 14:22:05
    1.视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图所对应的数据并不真正地存储在视图中, 而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。 2.根据创建视图时...
  • oracle视图索引操作

    万次阅读 2010-08-29 20:34:00
    来源:http://www.cnblogs.com/shengel/archive/2008/12/18/1357376.html转贴原因:属于Oracle基本操作和概念1.视图(VIEW) 1.1 概念  视图-----是由SELECT查询语句(可以是单表或者多表查询)定义的一个...
  • 在日常的业务处理中,在创建和处理表的时候会涉及到很多的设置和操作,而使用视图或者索引会给我们带来很多的便捷,下面我将我整理好的资料写出来,希望对大家有帮助 1. comment on column tablename.column is '...
  • oracle 原来表中有索引 两表关联成物化视图索引还有用吗? 要不要查询创建了?
  • Oracle视图索引

    千次阅读 2017-08-06 14:57:43
    视图索引 视图 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据,其作用就是节省空间、便于查询,主要用于统计查询。 创建语法: CREATE OR REPLACE [FORCE|NOFORCE] VIEW 视图名...
  • oracle 创建和删除索引

    2011-05-19 22:55:26
    删除索引 drop index CUS_LOWER_ENERGY_JLDNY; 新建一个索引 create index CUS_LOWER_ENERGY_JLDNY on CUS_LOWER_ENERGY (JLDBH, DLNY,HWBZ) tablespace TS_DSM_INDEX pctfree 10 initrans 2 maxtrans 255 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,354
精华内容 28,141
关键字:

oracle视图添加索引