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

    2016-10-07 16:20:53
    oracle建立索引一个表 student ,系统会经常通过 表中三个字段(name,sex,grade)进行搜索,即select * from student where name='xx' and sex='xx' and grade='xx' . 所以要给这三个字段都建立索引,请问怎么建立索引...

    oracle建立索引

    一个表 student ,系统会经常通过 表中三个字段(name,sex,grade)进行搜索,即select * from student where name='xx' and sex='xx' and grade='xx' . 所以要给这三个字段都建立索引,请问怎么建立索引? 有什么要注意的地方么?
    
    
    对三个字段建立索引:
    create index Stuname on student(name);
    create index Stusex on student(sex);
    create index Stugrade on student(grade);
    注意的问题,考虑是不是要建立唯一索引(unique),如果有学号的话,可以考虑建立唯一索引引。
    再就是对经常查询,但又相对稳定的可以建立聚簇索引,提高查询效率
    展开全文
  • Oracle 建立索引及SQL优化

    万次阅读 多人点赞 2016-08-08 15:04:21
    Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引 复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引。数据库索引主要进行提高访问速度。 建设...

    Oracle 建立索引及SQL优化

    数据库索引:

    索引有单列索引
    复合索引之说


    如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引。数据库索引主要进行提高访问速度。

    建设原则:

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

     2、对于两表连接的字段,应该建立索引。如果经常在某表的一个字段进行Order By 则也经过进行索引。

     3、不应该在小表上建设索引。

    优缺点:
     1、索引主要进行提高数据的查询速度。 当进行DML时,会更新索引。因此索引越多,则DML越慢,其需要维护索引。 因此在创建索引及DML需要权衡。

    创建索引:
     单一索引:Create Index <Index-Name> On <Table_Name>(Column_Name);

     复合索引: Create Index i_deptno_job on emp(deptno,job); —>在emp表的deptno、job列建立索引。

      select * from emp where deptno=66 and job='sals' ->走索引。

      select * from emp where deptno=66 OR job='sals' ->将进行全表扫描。不走索引

      select * from emp where deptno=66 ->走索引。

      select * from emp where job='sals' ->进行全表扫描、不走索引。

      如果在where 子句中有OR 操作符或单独引用Job 列(索引列的后面列) 则将不会走索引,将会进行全表扫描。

     


    Sql 优化:

    当Oracle数据库拿到SQL语句时,其会根据查询优化器分析该语句,并根据分析结果生成查询执行计划。
    也就是说,数据库是执行的查询计划,而不是Sql语句。
    查询优化器有rule-based-optimizer(基于规则的查询优化器) 和Cost-Based-optimizer(基于成本的查询优化器)。
    其中基于规则的查询优化器在10g版本中消失。
    对于规则查询,其最后查询的是全表扫描。而CBO则会根据统计信息进行最后的选择。


    1、先执行From ->Where ->Group By->Order By

    2、执行From 字句是从右往左进行执行。因此必须选择记录条数最少的表放在右边。这是为什么呢?  

    3、对于Where字句其执行顺序是从后向前执行、因此可以过滤最大数量记录的条件必须写在Where子句的末尾,而对于多表之间的连接,则写在之前。
    因为这样进行连接时,可以去掉大多不重复的项。  

    4. SELECT子句中避免使用(*)ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间

    5、索引失效的情况:
     ① Not Null/Null 如果某列建立索引,当进行Select * from emp where depto is not null/is null。 则会是索引失效。
     ② 索引列上不要使用函数,SELECT Col FROM tbl WHERE substr(name ,1 ,3 ) = 'ABC' 
    或者SELECT Col FROM tbl WHERE name LIKE '%ABC%' 而SELECT Col FROM tbl WHERE name LIKE 'ABC%' 会使用索引。

     ③ 索引列上不能进行计算SELECT Col FROM tbl WHERE col / 10 > 10 则会使索引失效,应该改成
    SELECT Col FROM tbl WHERE col > 10 * 10

     ④ 索引列上不要使用NOT ( != 、 <> )如:SELECT Col FROM tbl WHERE col ! = 10 
    应该 改成:SELECT Col FROM tbl WHERE col > 10 OR col < 10 。

    6、用UNION替换OR(适用于索引列)
      union:是将两个查询的结果集进行追加在一起,它不会引起列的变化。 由于是追加操作,需要两个结果集的列数应该是相关的,
    并且相应列的数据类型也应该相当的。union 返回两个结果集,同时将两个结果集重复的项进行消除。 如果不进行消除,用UNOIN ALL.

    通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 
    如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引.

      高效:
      SELECT LOC_ID , LOC_DESC , REGION
      FROM LOCATION
      WHERE LOC_ID = 10
      UNION
      SELECT LOC_ID , LOC_DESC , REGION
      FROM LOCATION
      WHERE REGION = “MELBOURNE”

      低效:
      SELECT LOC_ID , LOC_DESC , REGION
      FROM LOCATION
      WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
      如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.

    7. 用EXISTS替代IN、用NOT EXISTS替代NOT IN
    在许多基于基础表的查询中, 为了满足一个条件, 往往需要对另一个表进行联接. 在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 
    在子查询中, NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下, NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历). 
    为了避免使用NOT IN, 我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.

    例子:

    高效: SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X’ FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)

    低效: SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)

    展开全文
  • Oracle建立索引的原则

    千次阅读 2019-10-23 15:46:57
    1.数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的。 铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。 铁律三:对于按范围查询的列,最好建立索引。 铁律四:...

    1.数据库建立索引的原则

       铁律一:天下没有免费的午餐,使用索引是需要付出代价的。

       铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。

       铁律三:对于按范围查询的列,最好建立索引。

       铁律四:表中若有主键或者外键,一定要为其建立索引。

       铁律五:对于一些特殊的数据类型,不要建立索引。

       铁律六:索引可以跟Where语句的集合融为一体。

    建立索引常用规则:


    1、表的主键、外键必须有索引;

    2、数据量超过300的表应该有索引;

    3、经常与其他表进行连接的表,在连接字段上应该建立索引;

    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    5、索引应该建在选择性高的字段上;

    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

       A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

       B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?
          如果是,则可以建立复合索引;否则考虑单字段索引;

       C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

       D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

       E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

       F、复合索引中只要有一列含有NULL值,那么这一列对于此复合索引是无效的


         G.索引,不仅仅是主键和唯一键,也可以是其他的任何列。在使用like其中一个有索引的字段列的时候。

               如: select *from A name like ‘xxx%’;

       这个sql会使用name的索引(前提name建立了索引);而下面的语句就使用不了索引

       Select * from A name like ‘%xxx’;

       因为‘%’代表任何字符,%xxx不知道怎么去索引的,所以使用不了索引。

         H.  如果我们创建了(area,age,salary)的复合索引,那么其实相当于创建了(area,age,salary),(area,age),(area)三个索引,这样称为最佳左前             缀特性。因此我们在创建复合索引的应该将最常用作限制条件的列放在最左边,依次递减。
    8、频繁进行数据操作的表,不要建立太多的索引;

    9、删除无用的索引,避免对执行计划造成负面影响
    ————————————————
    版权声明:本文为CSDN博主「duolacmeng28」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011358288/article/details/41893717

    展开全文
  • 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的...
    1、表的主键、外键必须有索引;

    2、数据量超过300的表应该有索引;

    3、经常与其他表进行连接的表,在连接字段上应该建立索引;

    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    5、索引应该建在选择性高的字段上;

    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

       A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

       B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?
         
             如果是,则可以建立复合索引;否则考虑单字段索引;

       C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

       D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

       E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

    8、频繁进行数据操作的表,不要建立太多的索引;

    9、删除无用的索引,避免对执行计划造成负面影响
    展开全文
  • Oracle建立索引的规则

    千次阅读 2013-05-14 20:01:51
    Oracle数据库中,创建索引虽然比较简单。但是要合理的创建索引则比较困难了。笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本...
  • oracle 建立索引常用的规则

    千次阅读 多人点赞 2015-01-05 09:18:59
    3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段...
  • 数据库索引:索引有单列索引复合索引之说如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议... 2、对于两表连接的字段,应该建立索引。如果经常在某表的一个字段进行Order By 则...
  • 如何加快建立索引的速度:  总结一下:  1。 使用并行参数,8个CPU, 可以用parallel 6 ,最多占用6个CPU, 正常情况下没问题(前提是其他应用没有占超过2个CPU的资源)  2。 nologging, 绝对应该使用,会使速度...
  • 在这里所写的索引是要对 有两个表之间有主外键关系而配置的 建立是 说 名称已由现有对象使用 这是为什么了
  • 转自:https://blog.csdn.net/paperbook/article/details/51003313在oracle建立索引时,会阻塞对该表的DML操作,select不属于DML,是DQL。所以在大数据量的情况下建立索引,而此时会对该表进行DML操作时需要在建索引...
  • oracle数据库建立索引的原则

    千次阅读 2016-08-08 23:16:02
    数据库建立索引的原则 1,确定针对该表的操作是大量的查询操作还是大量的增删改操作。 2,尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。 3,尝试建立复合索引来...
  • 一、查看和建立索引 select * from user_indexes where table_name = 'student' create index i_student_num on student(num) 二、使用索引的注意点 ①类型匹配 若student中num列是varchar类型,语句select * from ...
  • 参考链接 http://blog.itpub.net/14401924/viewspace-659821/
  • oracle数据库分区表建立索引

    千次阅读 2017-10-12 18:06:01
    分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。 1. 局部索引分区的建立:create index idx_t on AAA(id)   ...
  • Oracle联合索引

    2015-10-15 22:24:29
    1.一个表建立多少个索引比较合适?比如说不大于5个 这个没有定论,楼主要综合查询效率和dml效率自己确定,索引可以加快select的查询速度,但也会降低delete,insert和update等dml语句的执行速度。 2.联...
  • Oracle索引

    千次阅读 2015-07-31 07:46:08
    Oracle 索引
  • Oracle强制索引

    千次阅读 2020-03-10 18:16:57
    光是在paytime上建立索引会产生很多随机读。 2.就算建立了索引,如果你查询的数据量很大的话,也不一定会用索引,有时候全表扫描速度比索引扫描要快!(官方文档上好像说的是大概10%,就是如果你查询的数据占到总数据...
  • Oracle建立全文索引详解

    千次阅读 2011-08-31 21:48:30
    最近总结了一下,相关例子和部分内容也是搜索于网络,具体分下面几部分:  ...不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作:  Java代码
  • oracle数据库索引

    千次阅读 2017-10-12 19:24:00
    [什么是索引] 在关系型数据库中,索引是一种和表有关的数据结构,它...数据库索引也是一样,只有先插入好数据,再建立索引。 [为何索引可提高查询效率] 因为DB在执行一条sql语句的时候,默认的方式是根据搜索条
  • 按照一般的说法,一个数据表如果数据量超过了几百条,就要考虑建立索引了。拖了这么久,今天终于给我们的一些变大了的数据表建立了索引。首先,查看目前已经建立的索引select index_name from all_indexes where ...
  • oracle创建索引语句

    千次阅读 2020-06-30 21:46:51
    oracle : 单索引 create index 索引名称 on table(column) 删除索引 drop index 索引名称 复合索引 create index WBSINDEX ON project_info(wbs,is_delete) 查询某张表中所有索引 select * from ALL_INDEXS ...
  • Oracle数据库索引

    万次阅读 2013-06-14 16:54:22
    -- Oracle默认建立B-tree索引 create index 索引名 on 表名(列名) 复合索引:在两列或多列上建立索引。在同一张表上可以有多个索引,但是这些索引所包含的列的组合必须不完全相同。如: create index
  • Oracle 创建索引语法

    千次阅读 2018-05-08 23:06:32
    Oracle索引可分为5种,它们包括唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。1、创建索引的标准语法以下为引用内容:  CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;例如:以下为引用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,289
精华内容 40,515
关键字:

oracle建立索引