zoukankan      html  css  js  c++  java
  • oracle创建索引

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

    索引的创建语句

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

    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一旦发现有索引的存在,并且这个索引能帮助提高查询速度,就是使用通过索引进行查询的方法。

    "不管你在经历着怎样的艰难,我只愿你今后的日子不会那么坎坷。"

  • 相关阅读:
    ASP.NET中在一般处理程序中使用session的简单介绍
    oracle 11gR2安装图文教程
    ORACEL 创建表空间
    Echarts使用心得总结(二)
    SqlServer 2008无法远程连接到服务器
    浅谈HTTP中Get与Post的区别
    java设计模式-观察者模式学习
    读牛人博客有感
    mysql的with rollup
    java中的枚举enum
  • 原文地址:https://www.cnblogs.com/yanggb/p/11221508.html
Copyright © 2011-2022 走看看