精华内容
下载资源
问答
  • oracle创建索引

    2020-09-17 17:21:20
    oracle创建索引 数据库索引是为了提高查询速度的一种数据结构。 索引的创建语句 索引的创建语句非常简单。 CREATE INDEX 索引名 ON 表名(列名); 除了单列索引,还可以创建包含多个列的复合索引。 CREATE INDEX 索引...

    数据库索引是为了提高查询速度的一种数据结构。

    索引的创建语句

    索引的创建语句非常简单。

    CREATE INDEX 索引名 ON 表名(列名);
    除了单列索引,还可以创建包含多个列的复合索引。

    CREATE INDEX 索引名 ON 表名(列名1, 列名2, 列名3, …);
    删除索引也非常简单。

    DROP INDEX 索引名;
    查看某个表中的所有索引也同样简单。

    SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = ‘表名’
    还可以查看某个表中建立了索引的所有列。

    SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = ‘表名’

    索引的建立原则

    1.索引应该建立在WHERE子句中经常使用的列上。如果某个大表经常使用某个字段进行查询,并且检索的啊行数小于总表行数的5%,则应该考虑在该列上建立索引。

    2.对于两个表连接的字段,应该建立索引。

    3.如果经常在某表的一个字段上进行Order By的话,则也应该在这个列上建立索引。

    4.不应该在小表上建立索引。

    索引的优缺点

    索引主要是为了提高数据的查询速度,这就是索引的优点。但是当进行增删改的时候,会更新索引。因此索引越多,增删改的速度就会越慢,因为有一个维护索引的过程。创建索引之前需要权衡该字段是否经常发生增删改操作,否则可能会带来负优化的问题。

    索引的优点

    1.很大地提高了数据的检索速度。

    2.创建唯一索引能保证数据库表中每一行数据的唯一性(唯一性约束)。

    3.提高表与表之间的连接速度。

    索引的缺点

    1.索引需要占用物理空间。

    2.当对表中的数据进行增加、删除和修改的时候,索引也要动态地进行维护,降低数据的维护速度。

    关于查询优化器

    当Oracle拿到SQL语句的时候,会使用查询优化器去分析该语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行的查询计划,而不是SQL语句。

    查询优化器有RBO(Rule-Based-Optimizer,基于规则的查询优化器)和CBO(Cost-Based-Optimizer,基于成本的查询优化器),其中基于规则的查询优化器在10g的版本中彻底消失了。原因是因为RBO最后的查询都是全表扫描,而CBO会根据统计信息选择最优的查询方案。

    因此,CBO一旦发现有索引的存在,并且这个索引能帮助提高查询速度,就是使用通过索引进行查询的方法。

    转载:https://www.cnblogs.com/yanggb/p/11221508.html

    展开全文
  • 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 使用索引查询依然很慢

    千次阅读 2020-01-16 10:38:25
    最近遇到一个生产问题,比较诡异。具体的话是一个查询接口,有时候会超时,大部分情况下不会。 一开始认为是代码问题,遇到这条数据有垃圾数据,查看日志后排除...难道没有索引,或者没走?不可能,其他的都没问题。...
    	最近遇到一个生产问题,比较诡异。具体的话是一个查询接口,有时候会超时,大部分情况下不会。
    一开始认为是代码问题,遇到这条数据有垃圾数据,查看日志后排除掉了。
    
    sql不方便贴上来,下面的sql是模拟的。
    
    select * from mobile where id='123456' and mobilenumber='13355556666';
    

    难道没有索引,或者没走?不可能,其他的都没问题。
    难道是mybatis的问题?可能有,但几率不大,有问题不会就这一个。

    把这条sql 单独在数据库执行是很快的。

    算了,还是找db。

    最后发现是数据库索引建的不均匀,db处理之后就好了。

    总结一下,遇到问题要大胆假设,小心求证。

    展开全文
  • oracle 分析sql 并创建索引

    千次阅读 2018-09-04 10:02:18
    第一步:explain plan for SELECT * from table //执行计划(此处的表查询由于隐私,所以没拿出来) 第二步:select * from table(dbms_xplan.display)//查询分析 ...//查看某个表的索引情况 crea...

    第一步:explain plan for SELECT * from table //执行计划(此处的表查询由于隐私,所以没拿出来)

    第二步:select * from table(dbms_xplan.display)//查询分析

    select * from user_indexes where table_name= 'DC_COMP_STAFF';//查看某个表的索引情况

    create index is_temp on DC_COMP_STAFF(is_temp)//为某个表的字段进行索引创建
     

    展开全文
  • oracle数据库创建索引

    2013-03-27 21:30:20
    而客户端登录时都会去数据库查询用户上次登录的IP和时间,由于没有索引所以很慢有时侯。 故需要对此表加入索引,一提高查询效率   首先先查下表中存在哪些索引 select index_name from all_indexes where ...
  • 目录 1.前言 2.一条老sql突然查询了 3.修复 ...但是,有意外情况,就是一条老的sql,一直用的没问题,偶然出现了查询的情况,曾在Oracle数据库上遇到过这个问题,以下对这次情况做一个回...
  • oracle位图索引

    千次阅读 2017-12-01 16:17:55
    那么数据库便要逐行的去查找性别为男的数据,当数据比较多的时候,这个查询就会变得很慢了。那怎么办呢?针对于这种查询,位图索引将会是一种非常好的办法。 当我们使用位图索引的时候,从性别方向上
  • ORACLE 索引

    2015-08-18 11:00:18
    什么时候创建索引? 以下情况可以创建索引: 列中数据值分布范围广 列经常在 WHERE 子句或连接条件中出现 表经常被访问而且数据量大 ,访问的数据大概占数据总量的2%到4%
  • 基本信息情况: 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2...加快创建索引速度主要从一下角度考虑: 使用nologging 参数 使用parallel 并行参数 在session级别使用manual pga,手动调整s...
  • Oracle索引

    2021-03-24 17:38:27
    Oracle 数据库会为表的主键和包含唯一约束的列自动创建索引,所以在建立唯一约束时,可以考虑该列是否必要建立。是否经常要作为查询条件 如果某个表的数据量较大(十几二十万以上),某列经常作为where的查询条件,...
  • oracle索引使用

    2014-03-30 18:16:20
    B-树索引在Oracle中是一个通用的索引,在创建索引时它就是默认的索引类型。最多可以包括32列。  位图索引Oracle为每个唯一键创建一个位图,然后把与键值所关联的ROWID保存为位图。最多可以包括30列。   一般...
  • Oracle-索引

    2017-03-01 17:07:23
    索引创建语法(Oracle):  CREATE [ UNIUQE | BITMAP ] INDEX .  ON .  ( | ASC | DESC,  | ASC | DESC,... )  TABLESPACE  STORAGE  LOGGING | NOLOGGING  COMPUTE STATISTICS  
  • Oracle位图索引

    千次阅读 2014-07-24 08:52:31
    而位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等), 索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码, 位置编码中的每一位表示键值对应的数据行的有无.一个位图索引...
  • 一天的数据量也就4000-5000条,但是取数据时很慢,通过sql2008通过oracle客户端访问oracle的视图取数据 单从语句上看,日期写成between and是否好点? 用普通视图有个缺点,来源表里建的索引失去作用了,如果...
  • 统计信息:描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。 执行计划:一条查询语句在Oracle中的执行过程或访问路径的描述,即执行查询语句的逻辑或方式 HINT:开发人员控制执行计划的接口,可以给...
  • 详谈 oracle 索引

    2015-01-04 16:46:32
    1、oracle索引空值问题  当在有空值得列上建立单列索引时,如果搜索条件为 is null 在解释计划中可以看到,对于此列oracle并没有使用索引查询;...如果列的选择度不低的话,索引扫描就会很慢。原因就在于要遍历很多
  • Oracle 视图索引

    千次阅读 2018-02-06 20:55:07
    第五章 视图索引的操作5.1 视图的功能一个视图实际上就是封装了一条复杂的查询语句注:为了在当前用户模式中创建视图,要求数据库用户必须有create any view(创建任何视图)的权限。5.2 创建视图的语法create [or ...
  • oracle 全文索引

    千次阅读 2015-07-28 22:34:16
    全文检索(oracle text) Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是 Oracle9i 采用的新名称,在 oracle8/8i 中被称为 ...Oracle Text 的索引和查找功能并不局限于
  • Oracle索引分裂和索引维护(精)

    千次阅读 2018-11-14 20:02:54
    索引不是建好了就行了?难道还需要维护?...对于开发人员来说,好像只对表操作就可以了,不用管oracle是如何做的,但实际上,若想清清楚楚、明明白白了解你写的接口,只有业务逻辑可不行,必须深入去知道索引...
  • SQL Server和Oracle数据库索引介绍

    千次阅读 2016-05-25 16:27:38
    SQL Server和Oracle数据库索引介绍 1 SQL Server中的索引   索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中...
  • Oracle 建立索引及SQL优化

    千次阅读 2018-02-11 09:53:22
    索引有单列索引和复合索引之说。 建设原则:  1、索引应该经常建在Where 子句经常用到的列上。如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%。则应该考虑。  2、对于两表连接的字段,...
  • Oracle索引设计原则

    2020-05-07 11:05:55
    导入数据后再创建索引 立在适当的表和字段上创建索引 经香查询的记录数目少于表中所有记录总数的 5%时就应当创建索引; 经常进行连接查询表时,在连接列上建立索引 能够显著提高查询的速度; 对于取值范围大的列...
  • Oracle外键的索引影响

    2018-08-14 11:18:25
    ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引。 外键列上缺少索引会带来:限制并发性、影响查询性能等问题。 1. 影响查询性能。 如果子表外键没有创.....
  • 并发100的情况下响应时间达到2秒多,这对于需求来说是不能接受的,通过分析日志发现有两个表的select语句耗时很高,100-500ms之间,但是sql就是简单的根据主键字段去查询,将sql拿出直接在plsql中执行还是很慢。...
  • oracle索引详解

    2011-08-31 21:37:49
    转载地址:http://oracle.chinaitlab.com/optimize/38502.html   什么是索引    索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;... Oracle存储索引的数据结构是B*树,位图索引也是
  • oracle数据库导出索引创建脚本

    千次阅读 2013-04-18 18:45:55
    最近在开发环境发现在某些功能上面做测试时,速度很慢,经查是索引没有创建。 经过分析发现是因为在之前从正式环境导数据到开发环境时,因为开发环境数据空间不足以承担正式环境的数据量,于是在使用imp导入的...
  • oracle表加索引反而查询的原因

    千次阅读 2009-07-31 18:51:00
    下面看一下索引的一些原理,我们就可以知道或许你也犯了同样的加了索引反而速度更的错: 当用户从数据表中查询数据时,Oracle数据库提供了两种查询的方式。一是从表中读取每一行,就是大家常说的全表扫
  • [Oracle]如何在亿级记录表中创建索引

    千次阅读 2012-02-07 22:03:21
    2)创建索引需要排序,使用pga_aggregate_target,要把这个值从200M加大到2G。 3)如果内存不够,需要temp表空间,则要把temp表空间加大到8G——itpub上有一个帖子说过,15亿条记录用了34G空间。 4)在线创建,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,707
精华内容 14,282
关键字:

oracle创建索引很慢